WHO Immunization Implementation Guide
1.0.0 - release

WHO Immunization Implementation Guide, published by WHO. This guide is not an authorized publication; it is the continuous build for version 1.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/WorldHealthOrganization/smart-immunizations/tree/132/merge and changes regularly. See the Directory of published versions

: IMMZD5DTTyphoidContraindicationsLogic - TTL Representation

Draft as of 2026-03-31

Raw ttl | Download

@prefix fhir: <http://hl7.org/fhir/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

# - resource -------------------------------------------------------------------

 a fhir:Library ;
  fhir:nodeRole fhir:treeRoot ;
  fhir:id [ fhir:v "IMMZD5DTTyphoidContraindicationsLogic"] ; # 
  fhir:meta [
    ( fhir:profile [
fhir:v "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"^^xsd:anyURI ;
fhir:l <http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary>     ] [
fhir:v "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"^^xsd:anyURI ;
fhir:l <http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary>     ] [
fhir:v "http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"^^xsd:anyURI ;
fhir:l <http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library>     ] [
fhir:v "http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"^^xsd:anyURI ;
fhir:l <http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module>     ] )
  ] ; # 
  fhir:text [
fhir:status [ fhir:v "extensions" ] ;
fhir:div [ fhir:v "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n<div>\n    <table class=\"grid dict\">\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Title: </b></th>\n            <td style=\"padding-left: 4px;\">IMMZD5DTTyphoidContraindicationsLogic</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Id: </b></th>\n            <td style=\"padding-left: 4px;\">IMMZD5DTTyphoidContraindicationsLogic</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Version: </b></th>\n            <td style=\"padding-left: 4px;\">1.0.0</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Url: </b></th>\n            <td style=\"padding-left: 4px;\"><a href=\"Library-IMMZD5DTTyphoidContraindicationsLogic.html\">IMMZD5DTTyphoidContraindicationsLogic</a></td>\n        </tr>\n        \n\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Status: </b></th>\n            <td style=\"padding-left: 4px;\">draft</td>\n        </tr>\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Type: </b></th>\n            <td style=\"padding-left: 4px;\">\n                \n                    \n                        \n                        <p style=\"margin-bottom: 5px;\">\n                            <b>system: </b> <span><a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a></span>\n                        </p>\n                        \n                        \n                        <p style=\"margin-bottom: 5px;\">\n                            <b>code: </b> <span>logic-library</span>\n                        </p>\n                        \n                        \n                    \n                \n                \n            </td>\n        </tr>\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Date: </b></th>\n            <td style=\"padding-left: 4px;\">2026-03-31 13:54:17+0000</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Publisher: </b></th>\n            <td style=\"padding-left: 4px;\">WHO</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Description: </b></th>\n            <td style=\"padding-left: 4px;\"><div><p>This library defines decision support logic for the IMMZ.D5.DT.Typhoid contraindications decision table in the Immunization CPG</p>\n</div></td>\n        </tr>\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Related Artifacts: </b></th>\n            <td style=\"padding-left: 4px;\">\n                \n                \n                \n                <p><b>Dependencies</b></p>\n                <ul>\n                  \n                    <li><a href=\"Library-IMMZD5DTTyphoidEncounterElements.html\">IMMZD5DTTyphoidEncounterElements</a></li>\n                  \n                </ul>\n                \n                \n                \n                \n                \n            </td>\n        </tr>\n        \n\n        \n        <tr>\n          <th scope=\"row\"><b>Parameters: </b></th>\n          <td style=\"padding-left: 4px;\">\n            <table class=\"grid-dict\">\n              <tr><th><b>Name</b></th><th><b>Type</b></th><th><b>Min</b></th><th><b>Max</b></th><th><b>In/Out</b></th></tr>\n              \n                <tr><th>Today</th><th>date</th><th>0</th><th>1</th><th>In</th></tr>\n              \n                <tr><th>Patient</th><th>Patient</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Draft Medication Request ID for Typhoid dose</th><th>id</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Typhoid vaccination could be contraindicated. Clinical judgement is required. Create a clinical note.</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Typhoid vaccination could be contraindicated. Clinical judgement is required. Create a clinical note. Guidance</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Typhoid vaccination is contraindicated for Ty21a vaccine. Clinical judgement is required for Typbar-TCV or ViPS vaccine. Create a clinical note</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Typhoid vaccination is contraindicated for Ty21a vaccine. Clinical judgement is required for Typbar-TCV or ViPS vaccine. Create a clinical note Guidance</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Typhoid vaccination is contraindicated for Ty21a vaccine. Case 1</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Typhoid vaccination is contraindicated for Ty21a vaccine. Case 2</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Typhoid vaccination is contraindicated for Ty21a vaccine.</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Typhoid vaccination is contraindicated for Ty21a vaccine. Guidance</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Guidance</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Has Guidance</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Test Validation</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n            </table>\n          </td>\n        </tr>\n        \n\n        \n\n        \n        \n        <tr>\n          <td colspan=\"2\">\n            <table>\n              <tr><th><a id=\"cql-content\"><b>Content: </b></a> text/cql</th></tr>\n              <tr><td><pre><code class=\"language-cql\">/*\n * Library: IMMZD5DTTyphoidContraindicationsLogic (IMMZ.D5.DT.Typhoid contraindications)\n * Rule: Check for contraindications before administering the vaccine(s) due\n * Decision Table: IMMZ.D5.DT.Typhoid contraindications\n * Trigger: IMMZ.D5 Determine vaccine(s) to be administered based on contraindications\n */\nlibrary IMMZD5DTTyphoidContraindicationsLogic\n\nusing FHIR version '4.0.1'\ninclude FHIRHelpers version '4.0.1'\n\ninclude IMMZD5DTTyphoidEncounterElements called Encounter\n\nparameter Today Date default Today()\n\ncontext Patient\n\n/*\n  @dynamicValue: Draft Medication Request ID for Typhoid dose\n  */\n  define \"Draft Medication Request ID for Typhoid dose\":\n    First(Encounter.\"Draft Medication Request for Typhoid dose\").id\n\n\n/*\n@dynamicValue: Guidance\n*/\ndefine \"Guidance\":\n  case \n    when \"Typhoid vaccination could be contraindicated. Clinical judgement is required. Create a clinical note.\" then \"Typhoid vaccination could be contraindicated. Clinical judgement is required. Create a clinical note. Guidance\"\n    when \"Typhoid vaccination is contraindicated for Ty21a vaccine. Clinical judgement is required for Typbar-TCV or ViPS vaccine. Create a clinical note\" then \"Typhoid vaccination is contraindicated for Ty21a vaccine. Clinical judgement is required for Typbar-TCV or ViPS vaccine. Create a clinical note Guidance\"\n    when \"Typhoid vaccination is contraindicated for Ty21a vaccine.\" then \"Typhoid vaccination is contraindicated for Ty21a vaccine. Guidance\" \n    else ''\n  end\n  \ndefine \"Has Guidance\":\n  \"Guidance\" is not null and \"Guidance\" != ''\n\n/*\n@output: Typhoid vaccination could be contraindicated. Clinical judgement is required. Create a clinical note.\n@pseudocode: \"Immunization recommendation status\" = \"Further evaluation needed\"\n*/\ndefine \"Typhoid vaccination could be contraindicated. Clinical judgement is required. Create a clinical note.\":\n  Encounter.\"The client has hypersensitivity to any component of the vaccine\"\n\n/*\n@output: Typhoid vaccination could be contraindicated. Clinical judgement is required. Create a clinical note. Guidance\n@guidance: Do not vaccinate client with typhoid if client has known hypersensitivity to any component of the vaccine.\n*/\ndefine \"Typhoid vaccination could be contraindicated. Clinical judgement is required. Create a clinical note. Guidance\":\n  'Do not vaccinate client with typhoid if client has known hypersensitivity to any component of the vaccine.'\n\n/*\n@output: Typhoid vaccination is contraindicated for Ty21a vaccine. Clinical judgement is required for Typbar-TCV or ViPS vaccine. Create a clinical note\n@pseudocode: \"Immunization recommendation status\" = \"Contraindicated\" (where \"Type of typhoid dose\" = \"Ty21a\") AND \"Immunization recommendation status\" = \"Further evaluation needed\" (where \"Type of typhoid dose\" = \"Typbar-TCV\" OR \"ViPS\")\n*/\ndefine \"Typhoid vaccination is contraindicated for Ty21a vaccine. Clinical judgement is required for Typbar-TCV or ViPS vaccine. Create a clinical note\":\n  Encounter.\"The client is currently pregnant\"\n\n/*\n@output: Typhoid vaccination is contraindicated for Ty21a vaccine. Clinical judgement is required for Typbar-TCV or ViPS vaccine. Create a clinical note Guidance\n@guidance: Do not vaccinate client with Ty21a vaccine as live attenuated Ty21a vaccine is contraindicated for pregnant clients. For Typbar-TCV or ViPS vaccine, check if an alternative typhoid vaccine is appropriate for the client, consider risks of vaccination and make a clinical judgement.\n*/\ndefine \"Typhoid vaccination is contraindicated for Ty21a vaccine. Clinical judgement is required for Typbar-TCV or ViPS vaccine. Create a clinical note Guidance\":\n  'Do not vaccinate client with Ty21a vaccine as live attenuated Ty21a vaccine is contraindicated for pregnant clients. For Typbar-TCV or ViPS vaccine, check if an alternative typhoid vaccine is appropriate for the client, consider risks of vaccination and make a clinical judgement.'\n\n/*\n@output: Typhoid vaccination is contraindicated for Ty21a vaccine. Case 1\n@pseudocode: \"Immunization recommendation status\" = \"Contraindicated\" (where \"Type of typhoid dose\" = \"Ty21a\")\n*/\ndefine \"Typhoid vaccination is contraindicated for Ty21a vaccine. Case 1\":\n  Encounter.\"The client is currently taking antibiotics\"\n\n/*\n@output: Typhoid vaccination is contraindicated for Ty21a vaccine. Case 2\n@pseudocode: \"Immunization recommendation status\" = \"Contraindicated\" (where \"Type of typhoid dose\" = \"Ty21a\")\n*/\ndefine \"Typhoid vaccination is contraindicated for Ty21a vaccine. Case 2\":\n  Encounter.\"The client's HIV status is positive\"\n    and Encounter.\"The client is not immunologically stable\"\n\n/*\n@output: Typhoid vaccination is contraindicated for Ty21a vaccine.\n@pseudocode: \"Immunization recommendation status\" = \"Contraindicated\" (where \"Type of typhoid dose\" = \"Ty21a\")\n*/\ndefine \"Typhoid vaccination is contraindicated for Ty21a vaccine.\":\n  \"Typhoid vaccination is contraindicated for Ty21a vaccine. Case 1\"\n    or \"Typhoid vaccination is contraindicated for Ty21a vaccine. Case 2\"\n\n/*\n@output: Typhoid vaccination is contraindicated for Ty21a vaccine. Guidance\n@guidance = Do not vaccinate client with Ty21a vaccine as Ty21a vaccine is contraindicated for clients who are taking antibiotics. Evaluate if other types of typhoid vacccines can be administered.\n@guidance = Do not vaccinate client with Ty21a vaccine as Ty21a vaccine is contraindicated for HIV-infected client who are not immunologically stable.\n*/\ndefine \"Typhoid vaccination is contraindicated for Ty21a vaccine. Guidance\":\n  case\n    when \"Typhoid vaccination is contraindicated for Ty21a vaccine. Case 1\" then 'Do not vaccinate client with Ty21a vaccine as Ty21a vaccine is contraindicated for clients who are taking antibiotics. Evaluate if other types of typhoid vacccines can be administered.'\n    when \"Typhoid vaccination is contraindicated for Ty21a vaccine. Case 2\" then 'Do not vaccinate client with Ty21a vaccine as Ty21a vaccine is contraindicated for HIV-infected client who are not immunologically stable.'\n    else ''\n  end\n\n\n/*\n@test: Test expected results based on example patients\n*/\ndefine \"Test Validation\":\n  case\n    when Patient.id = 'Typhoid41.1' then \"Typhoid vaccination could be contraindicated. Clinical judgement is required. Create a clinical note.\" and \"Guidance\" = 'Do not vaccinate client with typhoid if client has known hypersensitivity to any component of the vaccine.'\n    when Patient.id = 'Typhoid42.1' then \"Typhoid vaccination is contraindicated for Ty21a vaccine. Clinical judgement is required for Typbar-TCV or ViPS vaccine. Create a clinical note\" and \"Guidance\" = 'Do not vaccinate client with Ty21a vaccine as live attenuated Ty21a vaccine is contraindicated for pregnant clients. For Typbar-TCV or ViPS vaccine, check if an alternative typhoid vaccine is appropriate for the client, consider risks of vaccination and make a clinical judgement.'\n    when Patient.id = 'Typhoid43.1' then \"Typhoid vaccination is contraindicated for Ty21a vaccine. Case 1\" and \"Guidance\" = 'Do not vaccinate client with Ty21a vaccine as Ty21a vaccine is contraindicated for clients who are taking antibiotics. Evaluate if other types of typhoid vacccines can be administered.'\n    when Patient.id = 'Typhoid44.2' then \"Typhoid vaccination is contraindicated for Ty21a vaccine. Case 2\" and \"Guidance\" = 'Do not vaccinate client with Ty21a vaccine as Ty21a vaccine is contraindicated for HIV-infected client who are not immunologically stable.'\n    else 'No test case set'\n  end\n</code></pre></td></tr>\n            </table>\n          </td>\n        </tr>\n        \n        \n        \n    </table>\n</div>\n</div>"^^rdf:XMLLiteral ]
  ] ; # 
  fhir:extension ( [
fhir:url [
fhir:v "http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability"^^xsd:anyURI ;
fhir:l <http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability>     ] ;
fhir:value [
a fhir:Code ;
fhir:v "computable"     ]
  ] ) ; # 
  fhir:url [
fhir:v "http://smart.who.int/immunizations/Library/IMMZD5DTTyphoidContraindicationsLogic"^^xsd:anyURI ;
fhir:l <http://smart.who.int/immunizations/Library/IMMZD5DTTyphoidContraindicationsLogic>
  ] ; # 
  fhir:version [ fhir:v "1.0.0"] ; # 
  fhir:name [ fhir:v "IMMZD5DTTyphoidContraindicationsLogic"] ; # 
  fhir:title [ fhir:v "IMMZD5DTTyphoidContraindicationsLogic"] ; # 
  fhir:status [ fhir:v "draft"] ; # 
  fhir:experimental [ fhir:v false] ; # 
  fhir:type [
    ( fhir:coding [
fhir:system [
fhir:v "http://terminology.hl7.org/CodeSystem/library-type"^^xsd:anyURI ;
fhir:l <http://terminology.hl7.org/CodeSystem/library-type>       ] ;
fhir:code [ fhir:v "logic-library" ]     ] )
  ] ; # 
  fhir:date [ fhir:v "2026-03-31T13:54:17+00:00"^^xsd:dateTime] ; # 
  fhir:publisher [ fhir:v "WHO"] ; # 
  fhir:contact ( [
fhir:name [ fhir:v "WHO" ] ;
    ( fhir:telecom [
fhir:system [ fhir:v "url" ] ;
fhir:value [ fhir:v "http://who.int" ]     ] )
  ] ) ; # 
  fhir:description [ fhir:v "This library defines decision support logic for the IMMZ.D5.DT.Typhoid contraindications decision table in the Immunization CPG"] ; # 
  fhir:relatedArtifact ( [
fhir:type [ fhir:v "depends-on" ] ;
fhir:display [ fhir:v "Library Encounter" ] ;
fhir:resource [
fhir:v "http://smart.who.int/immunizations/Library/IMMZD5DTTyphoidEncounterElements"^^xsd:anyURI ;
fhir:l <http://smart.who.int/immunizations/Library/IMMZD5DTTyphoidEncounterElements>     ]
  ] ) ; # 
  fhir:parameter ( [
fhir:name [ fhir:v "Today" ] ;
fhir:use [ fhir:v "in" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "date" ]
  ] [
fhir:name [ fhir:v "Patient" ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "Patient" ]
  ] [
fhir:name [ fhir:v "Draft Medication Request ID for Typhoid dose" ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "id" ]
  ] [
fhir:name [ fhir:v "Typhoid vaccination could be contraindicated. Clinical judgement is required. Create a clinical note." ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "boolean" ]
  ] [
fhir:name [ fhir:v "Typhoid vaccination could be contraindicated. Clinical judgement is required. Create a clinical note. Guidance" ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "string" ]
  ] [
fhir:name [ fhir:v "Typhoid vaccination is contraindicated for Ty21a vaccine. Clinical judgement is required for Typbar-TCV or ViPS vaccine. Create a clinical note" ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "boolean" ]
  ] [
fhir:name [ fhir:v "Typhoid vaccination is contraindicated for Ty21a vaccine. Clinical judgement is required for Typbar-TCV or ViPS vaccine. Create a clinical note Guidance" ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "string" ]
  ] [
fhir:name [ fhir:v "Typhoid vaccination is contraindicated for Ty21a vaccine. Case 1" ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "boolean" ]
  ] [
fhir:name [ fhir:v "Typhoid vaccination is contraindicated for Ty21a vaccine. Case 2" ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "boolean" ]
  ] [
fhir:name [ fhir:v "Typhoid vaccination is contraindicated for Ty21a vaccine." ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "boolean" ]
  ] [
fhir:name [ fhir:v "Typhoid vaccination is contraindicated for Ty21a vaccine. Guidance" ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "string" ]
  ] [
fhir:name [ fhir:v "Guidance" ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "string" ]
  ] [
fhir:name [ fhir:v "Has Guidance" ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "boolean" ]
  ] [
fhir:name [ fhir:v "Test Validation" ] ;
fhir:use [ fhir:v "out" ] ;
fhir:min [ fhir:v 0 ] ;
fhir:max [ fhir:v "1" ] ;
fhir:type [ fhir:v "Resource" ]
  ] ) ; # 
  fhir:content ( [
fhir:contentType [ fhir:v "text/cql" ] ;
fhir:data [ fhir:v "LyoKICogTGlicmFyeTogSU1NWkQ1RFRUeXBob2lkQ29udHJhaW5kaWNhdGlvbnNMb2dpYyAoSU1NWi5ENS5EVC5UeXBob2lkIGNvbnRyYWluZGljYXRpb25zKQogKiBSdWxlOiBDaGVjayBmb3IgY29udHJhaW5kaWNhdGlvbnMgYmVmb3JlIGFkbWluaXN0ZXJpbmcgdGhlIHZhY2NpbmUocykgZHVlCiAqIERlY2lzaW9uIFRhYmxlOiBJTU1aLkQ1LkRULlR5cGhvaWQgY29udHJhaW5kaWNhdGlvbnMKICogVHJpZ2dlcjogSU1NWi5ENSBEZXRlcm1pbmUgdmFjY2luZShzKSB0byBiZSBhZG1pbmlzdGVyZWQgYmFzZWQgb24gY29udHJhaW5kaWNhdGlvbnMKICovCmxpYnJhcnkgSU1NWkQ1RFRUeXBob2lkQ29udHJhaW5kaWNhdGlvbnNMb2dpYwoKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgSU1NWkQ1RFRUeXBob2lkRW5jb3VudGVyRWxlbWVudHMgY2FsbGVkIEVuY291bnRlcgoKcGFyYW1ldGVyIFRvZGF5IERhdGUgZGVmYXVsdCBUb2RheSgpCgpjb250ZXh0IFBhdGllbnQKCi8qCiAgQGR5bmFtaWNWYWx1ZTogRHJhZnQgTWVkaWNhdGlvbiBSZXF1ZXN0IElEIGZvciBUeXBob2lkIGRvc2UKICAqLwogIGRlZmluZSAiRHJhZnQgTWVkaWNhdGlvbiBSZXF1ZXN0IElEIGZvciBUeXBob2lkIGRvc2UiOgogICAgRmlyc3QoRW5jb3VudGVyLiJEcmFmdCBNZWRpY2F0aW9uIFJlcXVlc3QgZm9yIFR5cGhvaWQgZG9zZSIpLmlkCgoKLyoKQGR5bmFtaWNWYWx1ZTogR3VpZGFuY2UKKi8KZGVmaW5lICJHdWlkYW5jZSI6CiAgY2FzZSAKICAgIHdoZW4gIlR5cGhvaWQgdmFjY2luYXRpb24gY291bGQgYmUgY29udHJhaW5kaWNhdGVkLiBDbGluaWNhbCBqdWRnZW1lbnQgaXMgcmVxdWlyZWQuIENyZWF0ZSBhIGNsaW5pY2FsIG5vdGUuIiB0aGVuICJUeXBob2lkIHZhY2NpbmF0aW9uIGNvdWxkIGJlIGNvbnRyYWluZGljYXRlZC4gQ2xpbmljYWwganVkZ2VtZW50IGlzIHJlcXVpcmVkLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlLiBHdWlkYW5jZSIKICAgIHdoZW4gIlR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLiBDbGluaWNhbCBqdWRnZW1lbnQgaXMgcmVxdWlyZWQgZm9yIFR5cGJhci1UQ1Ygb3IgVmlQUyB2YWNjaW5lLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlIiB0aGVuICJUeXBob2lkIHZhY2NpbmF0aW9uIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgVHkyMWEgdmFjY2luZS4gQ2xpbmljYWwganVkZ2VtZW50IGlzIHJlcXVpcmVkIGZvciBUeXBiYXItVENWIG9yIFZpUFMgdmFjY2luZS4gQ3JlYXRlIGEgY2xpbmljYWwgbm90ZSBHdWlkYW5jZSIKICAgIHdoZW4gIlR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLiIgdGhlbiAiVHlwaG9pZCB2YWNjaW5hdGlvbiBpcyBjb250cmFpbmRpY2F0ZWQgZm9yIFR5MjFhIHZhY2NpbmUuIEd1aWRhbmNlIiAKICAgIGVsc2UgJycKICBlbmQKICAKZGVmaW5lICJIYXMgR3VpZGFuY2UiOgogICJHdWlkYW5jZSIgaXMgbm90IG51bGwgYW5kICJHdWlkYW5jZSIgIT0gJycKCi8qCkBvdXRwdXQ6IFR5cGhvaWQgdmFjY2luYXRpb24gY291bGQgYmUgY29udHJhaW5kaWNhdGVkLiBDbGluaWNhbCBqdWRnZW1lbnQgaXMgcmVxdWlyZWQuIENyZWF0ZSBhIGNsaW5pY2FsIG5vdGUuCkBwc2V1ZG9jb2RlOiAiSW1tdW5pemF0aW9uIHJlY29tbWVuZGF0aW9uIHN0YXR1cyIgPSAiRnVydGhlciBldmFsdWF0aW9uIG5lZWRlZCIKKi8KZGVmaW5lICJUeXBob2lkIHZhY2NpbmF0aW9uIGNvdWxkIGJlIGNvbnRyYWluZGljYXRlZC4gQ2xpbmljYWwganVkZ2VtZW50IGlzIHJlcXVpcmVkLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlLiI6CiAgRW5jb3VudGVyLiJUaGUgY2xpZW50IGhhcyBoeXBlcnNlbnNpdGl2aXR5IHRvIGFueSBjb21wb25lbnQgb2YgdGhlIHZhY2NpbmUiCgovKgpAb3V0cHV0OiBUeXBob2lkIHZhY2NpbmF0aW9uIGNvdWxkIGJlIGNvbnRyYWluZGljYXRlZC4gQ2xpbmljYWwganVkZ2VtZW50IGlzIHJlcXVpcmVkLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlLiBHdWlkYW5jZQpAZ3VpZGFuY2U6IERvIG5vdCB2YWNjaW5hdGUgY2xpZW50IHdpdGggdHlwaG9pZCBpZiBjbGllbnQgaGFzIGtub3duIGh5cGVyc2Vuc2l0aXZpdHkgdG8gYW55IGNvbXBvbmVudCBvZiB0aGUgdmFjY2luZS4KKi8KZGVmaW5lICJUeXBob2lkIHZhY2NpbmF0aW9uIGNvdWxkIGJlIGNvbnRyYWluZGljYXRlZC4gQ2xpbmljYWwganVkZ2VtZW50IGlzIHJlcXVpcmVkLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlLiBHdWlkYW5jZSI6CiAgJ0RvIG5vdCB2YWNjaW5hdGUgY2xpZW50IHdpdGggdHlwaG9pZCBpZiBjbGllbnQgaGFzIGtub3duIGh5cGVyc2Vuc2l0aXZpdHkgdG8gYW55IGNvbXBvbmVudCBvZiB0aGUgdmFjY2luZS4nCgovKgpAb3V0cHV0OiBUeXBob2lkIHZhY2NpbmF0aW9uIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgVHkyMWEgdmFjY2luZS4gQ2xpbmljYWwganVkZ2VtZW50IGlzIHJlcXVpcmVkIGZvciBUeXBiYXItVENWIG9yIFZpUFMgdmFjY2luZS4gQ3JlYXRlIGEgY2xpbmljYWwgbm90ZQpAcHNldWRvY29kZTogIkltbXVuaXphdGlvbiByZWNvbW1lbmRhdGlvbiBzdGF0dXMiID0gIkNvbnRyYWluZGljYXRlZCIgKHdoZXJlICJUeXBlIG9mIHR5cGhvaWQgZG9zZSIgPSAiVHkyMWEiKSBBTkQgIkltbXVuaXphdGlvbiByZWNvbW1lbmRhdGlvbiBzdGF0dXMiID0gIkZ1cnRoZXIgZXZhbHVhdGlvbiBuZWVkZWQiICh3aGVyZSAiVHlwZSBvZiB0eXBob2lkIGRvc2UiID0gIlR5cGJhci1UQ1YiIE9SICJWaVBTIikKKi8KZGVmaW5lICJUeXBob2lkIHZhY2NpbmF0aW9uIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgVHkyMWEgdmFjY2luZS4gQ2xpbmljYWwganVkZ2VtZW50IGlzIHJlcXVpcmVkIGZvciBUeXBiYXItVENWIG9yIFZpUFMgdmFjY2luZS4gQ3JlYXRlIGEgY2xpbmljYWwgbm90ZSI6CiAgRW5jb3VudGVyLiJUaGUgY2xpZW50IGlzIGN1cnJlbnRseSBwcmVnbmFudCIKCi8qCkBvdXRwdXQ6IFR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLiBDbGluaWNhbCBqdWRnZW1lbnQgaXMgcmVxdWlyZWQgZm9yIFR5cGJhci1UQ1Ygb3IgVmlQUyB2YWNjaW5lLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlIEd1aWRhbmNlCkBndWlkYW5jZTogRG8gbm90IHZhY2NpbmF0ZSBjbGllbnQgd2l0aCBUeTIxYSB2YWNjaW5lIGFzIGxpdmUgYXR0ZW51YXRlZCBUeTIxYSB2YWNjaW5lIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgcHJlZ25hbnQgY2xpZW50cy4gRm9yIFR5cGJhci1UQ1Ygb3IgVmlQUyB2YWNjaW5lLCBjaGVjayBpZiBhbiBhbHRlcm5hdGl2ZSB0eXBob2lkIHZhY2NpbmUgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBjbGllbnQsIGNvbnNpZGVyIHJpc2tzIG9mIHZhY2NpbmF0aW9uIGFuZCBtYWtlIGEgY2xpbmljYWwganVkZ2VtZW50LgoqLwpkZWZpbmUgIlR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLiBDbGluaWNhbCBqdWRnZW1lbnQgaXMgcmVxdWlyZWQgZm9yIFR5cGJhci1UQ1Ygb3IgVmlQUyB2YWNjaW5lLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlIEd1aWRhbmNlIjoKICAnRG8gbm90IHZhY2NpbmF0ZSBjbGllbnQgd2l0aCBUeTIxYSB2YWNjaW5lIGFzIGxpdmUgYXR0ZW51YXRlZCBUeTIxYSB2YWNjaW5lIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgcHJlZ25hbnQgY2xpZW50cy4gRm9yIFR5cGJhci1UQ1Ygb3IgVmlQUyB2YWNjaW5lLCBjaGVjayBpZiBhbiBhbHRlcm5hdGl2ZSB0eXBob2lkIHZhY2NpbmUgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBjbGllbnQsIGNvbnNpZGVyIHJpc2tzIG9mIHZhY2NpbmF0aW9uIGFuZCBtYWtlIGEgY2xpbmljYWwganVkZ2VtZW50LicKCi8qCkBvdXRwdXQ6IFR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLiBDYXNlIDEKQHBzZXVkb2NvZGU6ICJJbW11bml6YXRpb24gcmVjb21tZW5kYXRpb24gc3RhdHVzIiA9ICJDb250cmFpbmRpY2F0ZWQiICh3aGVyZSAiVHlwZSBvZiB0eXBob2lkIGRvc2UiID0gIlR5MjFhIikKKi8KZGVmaW5lICJUeXBob2lkIHZhY2NpbmF0aW9uIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgVHkyMWEgdmFjY2luZS4gQ2FzZSAxIjoKICBFbmNvdW50ZXIuIlRoZSBjbGllbnQgaXMgY3VycmVudGx5IHRha2luZyBhbnRpYmlvdGljcyIKCi8qCkBvdXRwdXQ6IFR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLiBDYXNlIDIKQHBzZXVkb2NvZGU6ICJJbW11bml6YXRpb24gcmVjb21tZW5kYXRpb24gc3RhdHVzIiA9ICJDb250cmFpbmRpY2F0ZWQiICh3aGVyZSAiVHlwZSBvZiB0eXBob2lkIGRvc2UiID0gIlR5MjFhIikKKi8KZGVmaW5lICJUeXBob2lkIHZhY2NpbmF0aW9uIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgVHkyMWEgdmFjY2luZS4gQ2FzZSAyIjoKICBFbmNvdW50ZXIuIlRoZSBjbGllbnQncyBISVYgc3RhdHVzIGlzIHBvc2l0aXZlIgogICAgYW5kIEVuY291bnRlci4iVGhlIGNsaWVudCBpcyBub3QgaW1tdW5vbG9naWNhbGx5IHN0YWJsZSIKCi8qCkBvdXRwdXQ6IFR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLgpAcHNldWRvY29kZTogIkltbXVuaXphdGlvbiByZWNvbW1lbmRhdGlvbiBzdGF0dXMiID0gIkNvbnRyYWluZGljYXRlZCIgKHdoZXJlICJUeXBlIG9mIHR5cGhvaWQgZG9zZSIgPSAiVHkyMWEiKQoqLwpkZWZpbmUgIlR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLiI6CiAgIlR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLiBDYXNlIDEiCiAgICBvciAiVHlwaG9pZCB2YWNjaW5hdGlvbiBpcyBjb250cmFpbmRpY2F0ZWQgZm9yIFR5MjFhIHZhY2NpbmUuIENhc2UgMiIKCi8qCkBvdXRwdXQ6IFR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLiBHdWlkYW5jZQpAZ3VpZGFuY2UgPSBEbyBub3QgdmFjY2luYXRlIGNsaWVudCB3aXRoIFR5MjFhIHZhY2NpbmUgYXMgVHkyMWEgdmFjY2luZSBpcyBjb250cmFpbmRpY2F0ZWQgZm9yIGNsaWVudHMgd2hvIGFyZSB0YWtpbmcgYW50aWJpb3RpY3MuIEV2YWx1YXRlIGlmIG90aGVyIHR5cGVzIG9mIHR5cGhvaWQgdmFjY2NpbmVzIGNhbiBiZSBhZG1pbmlzdGVyZWQuCkBndWlkYW5jZSA9IERvIG5vdCB2YWNjaW5hdGUgY2xpZW50IHdpdGggVHkyMWEgdmFjY2luZSBhcyBUeTIxYSB2YWNjaW5lIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgSElWLWluZmVjdGVkIGNsaWVudCB3aG8gYXJlIG5vdCBpbW11bm9sb2dpY2FsbHkgc3RhYmxlLgoqLwpkZWZpbmUgIlR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLiBHdWlkYW5jZSI6CiAgY2FzZQogICAgd2hlbiAiVHlwaG9pZCB2YWNjaW5hdGlvbiBpcyBjb250cmFpbmRpY2F0ZWQgZm9yIFR5MjFhIHZhY2NpbmUuIENhc2UgMSIgdGhlbiAnRG8gbm90IHZhY2NpbmF0ZSBjbGllbnQgd2l0aCBUeTIxYSB2YWNjaW5lIGFzIFR5MjFhIHZhY2NpbmUgaXMgY29udHJhaW5kaWNhdGVkIGZvciBjbGllbnRzIHdobyBhcmUgdGFraW5nIGFudGliaW90aWNzLiBFdmFsdWF0ZSBpZiBvdGhlciB0eXBlcyBvZiB0eXBob2lkIHZhY2NjaW5lcyBjYW4gYmUgYWRtaW5pc3RlcmVkLicKICAgIHdoZW4gIlR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLiBDYXNlIDIiIHRoZW4gJ0RvIG5vdCB2YWNjaW5hdGUgY2xpZW50IHdpdGggVHkyMWEgdmFjY2luZSBhcyBUeTIxYSB2YWNjaW5lIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgSElWLWluZmVjdGVkIGNsaWVudCB3aG8gYXJlIG5vdCBpbW11bm9sb2dpY2FsbHkgc3RhYmxlLicKICAgIGVsc2UgJycKICBlbmQKCgovKgpAdGVzdDogVGVzdCBleHBlY3RlZCByZXN1bHRzIGJhc2VkIG9uIGV4YW1wbGUgcGF0aWVudHMKKi8KZGVmaW5lICJUZXN0IFZhbGlkYXRpb24iOgogIGNhc2UKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdUeXBob2lkNDEuMScgdGhlbiAiVHlwaG9pZCB2YWNjaW5hdGlvbiBjb3VsZCBiZSBjb250cmFpbmRpY2F0ZWQuIENsaW5pY2FsIGp1ZGdlbWVudCBpcyByZXF1aXJlZC4gQ3JlYXRlIGEgY2xpbmljYWwgbm90ZS4iIGFuZCAiR3VpZGFuY2UiID0gJ0RvIG5vdCB2YWNjaW5hdGUgY2xpZW50IHdpdGggdHlwaG9pZCBpZiBjbGllbnQgaGFzIGtub3duIGh5cGVyc2Vuc2l0aXZpdHkgdG8gYW55IGNvbXBvbmVudCBvZiB0aGUgdmFjY2luZS4nCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnVHlwaG9pZDQyLjEnIHRoZW4gIlR5cGhvaWQgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBUeTIxYSB2YWNjaW5lLiBDbGluaWNhbCBqdWRnZW1lbnQgaXMgcmVxdWlyZWQgZm9yIFR5cGJhci1UQ1Ygb3IgVmlQUyB2YWNjaW5lLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlIiBhbmQgIkd1aWRhbmNlIiA9ICdEbyBub3QgdmFjY2luYXRlIGNsaWVudCB3aXRoIFR5MjFhIHZhY2NpbmUgYXMgbGl2ZSBhdHRlbnVhdGVkIFR5MjFhIHZhY2NpbmUgaXMgY29udHJhaW5kaWNhdGVkIGZvciBwcmVnbmFudCBjbGllbnRzLiBGb3IgVHlwYmFyLVRDViBvciBWaVBTIHZhY2NpbmUsIGNoZWNrIGlmIGFuIGFsdGVybmF0aXZlIHR5cGhvaWQgdmFjY2luZSBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlIGNsaWVudCwgY29uc2lkZXIgcmlza3Mgb2YgdmFjY2luYXRpb24gYW5kIG1ha2UgYSBjbGluaWNhbCBqdWRnZW1lbnQuJwogICAgd2hlbiBQYXRpZW50LmlkID0gJ1R5cGhvaWQ0My4xJyB0aGVuICJUeXBob2lkIHZhY2NpbmF0aW9uIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgVHkyMWEgdmFjY2luZS4gQ2FzZSAxIiBhbmQgIkd1aWRhbmNlIiA9ICdEbyBub3QgdmFjY2luYXRlIGNsaWVudCB3aXRoIFR5MjFhIHZhY2NpbmUgYXMgVHkyMWEgdmFjY2luZSBpcyBjb250cmFpbmRpY2F0ZWQgZm9yIGNsaWVudHMgd2hvIGFyZSB0YWtpbmcgYW50aWJpb3RpY3MuIEV2YWx1YXRlIGlmIG90aGVyIHR5cGVzIG9mIHR5cGhvaWQgdmFjY2NpbmVzIGNhbiBiZSBhZG1pbmlzdGVyZWQuJwogICAgd2hlbiBQYXRpZW50LmlkID0gJ1R5cGhvaWQ0NC4yJyB0aGVuICJUeXBob2lkIHZhY2NpbmF0aW9uIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgVHkyMWEgdmFjY2luZS4gQ2FzZSAyIiBhbmQgIkd1aWRhbmNlIiA9ICdEbyBub3QgdmFjY2luYXRlIGNsaWVudCB3aXRoIFR5MjFhIHZhY2NpbmUgYXMgVHkyMWEgdmFjY2luZSBpcyBjb250cmFpbmRpY2F0ZWQgZm9yIEhJVi1pbmZlY3RlZCBjbGllbnQgd2hvIGFyZSBub3QgaW1tdW5vbG9naWNhbGx5IHN0YWJsZS4nCiAgICBlbHNlICdObyB0ZXN0IGNhc2Ugc2V0JwogIGVuZAo="^^xsd:base64Binary ]
  ] ) . #