Draft dQM CMS Content Implementation Guide
2025.1.0 - CI Build

Draft dQM CMS Content Implementation Guide, published by cqframework. This guide is not an authorized publication; it is the continuous build for version 2025.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cqframework/dqm-content-cms-2025/ and changes regularly. See the Directory of published versions

: CMS190FHIRVTEProphylaxisICU - JSON Representation

Draft as of 2026-09-19

Raw json | Download

{
  "resourceType" : "Library",
  "id" : "CMS190FHIRVTEProphylaxisICU",
  "text" : {
    "status" : "extensions",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n  <table class=\"narrative-table\">\n    <tbody>\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"metadata\"> </a>Metadata</th>\n\n\n</tr>\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Version</th>\n\n\n\n<td class=\"content-container\">1.1.000</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Status</th>\n\n\n\n<td class=\"content-container\">Draft</td>\n\n\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Type</th>\n\n\n\n<td class=\"content-container\">\n    <a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a>#logic-library\n\n\n</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"parameters\"> </a>Parameters</th>\n\n\n</tr>\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Parameter</th>\n\n\n\n<td class=\"content-container\">None</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n  <tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\">Library Content</th>\n\n\n</tr>\n  \n    \n    <tr>\n      <th scope=\"row\" class=\"row-header\">CQL Content</th>\n      <td>\n        <a name=\"cql-content\"> </a>\n        <pre style=\"border: none;\" class=\"content-container highlight language-cql\"><code class=\"language-cql\">/*\nNOTE: For use by March 2026 US Realm Connectathon participants for internal use only. Not for use or distribution in commercial products.\n*/\nlibrary CMS190FHIRVTEProphylaxisICU version '1.1.000'\n\nusing USQualityCore version '0.1.0-cibuild'\nusing USCore version '6.1.0-derived'\nusing FHIR version '4.0.1'\n\ninclude hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers\ninclude hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon\ninclude hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon\ninclude hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements\n\ninclude CQMCommon version '5.1.000' called CQMCommon\ninclude USQualityCoreCommon version '0.1.0-cibuild' called USQualityCoreCommon\ninclude SupplementalDataElements version '6.1.000' called SDE\ninclude Status version '2.1.000' called Status\ninclude TJCOverall version '9.1.000' called TJC\ninclude VTE version '9.1.000' called VTE\n\ncodesystem &quot;LOINC&quot;: 'http://loinc.org'\n\ncode &quot;Risk for venous thromboembolism&quot;: '72136-5' from &quot;LOINC&quot; display 'Risk for venous thromboembolism'\n\nvalueset &quot;Application of Graduated Compression Stockings&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1110.66'\nvalueset &quot;Application of Intermittent Pneumatic Compression Devices&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1110.65'\nvalueset &quot;Application of Venous Foot Pumps&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1110.64'\nvalueset &quot;Atrial Fibrillation or Flutter&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.202'\nvalueset &quot;Comfort Measures&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/1.3.6.1.4.1.33895.1.3.0.45'\nvalueset &quot;Direct Thrombin Inhibitor&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.205'\nvalueset &quot;General or Neuraxial Anesthesia&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.1743'\nvalueset &quot;General Surgery&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.255'\nvalueset &quot;Glycoprotein IIb IIIa Inhibitors&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1045.41'\nvalueset &quot;Graduated compression stockings&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.256'\nvalueset &quot;Gynecological Surgery&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.257'\nvalueset &quot;Hip Fracture Surgery&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.258'\nvalueset &quot;Hip Replacement Surgery&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.259'\nvalueset &quot;Injectable Factor Xa Inhibitor for VTE Prophylaxis&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.211'\nvalueset &quot;INR&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.213'\nvalueset &quot;Intensive Care Unit&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1029.206'\nvalueset &quot;Intermittent pneumatic compression devices&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.214'\nvalueset &quot;Intracranial Neurosurgery&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.260'\nvalueset &quot;Intravenous route&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.222'\nvalueset &quot;Knee Replacement Surgery&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.261'\nvalueset &quot;Low Dose Unfractionated Heparin for VTE Prophylaxis&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1045.39'\nvalueset &quot;Low Molecular Weight Heparin for VTE Prophylaxis&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.219'\nvalueset &quot;Low Risk&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.400'\nvalueset &quot;Medical Reason For Not Providing Treatment&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.473'\nvalueset &quot;Oral Factor Xa Inhibitor for VTE Prophylaxis or VTE Treatment&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.134'\nvalueset &quot;Patient Refusal&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.93'\nvalueset &quot;Rivaroxaban for VTE Prophylaxis&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1110.50'\nvalueset &quot;Subcutaneous route&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.223'\nvalueset &quot;Unfractionated Heparin&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.218'\nvalueset &quot;Urological Surgery&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.272'\nvalueset &quot;Venous foot pumps&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.230'\nvalueset &quot;Venous Thromboembolism&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.279'\nvalueset &quot;Warfarin&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.232'\n\nparameter &quot;Measurement Period&quot; Interval&lt;DateTime&gt;\n  default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)\n\ncontext Patient\n\ndefine &quot;SDE Ethnicity&quot;:\n  SDE.&quot;SDE Ethnicity&quot;\n\ndefine &quot;SDE Payer&quot;:\n  SDE.&quot;SDE Payer&quot;\n\ndefine &quot;SDE Race&quot;:\n  SDE.&quot;SDE Race&quot;\n\ndefine &quot;SDE Sex&quot;:\n  SDE.&quot;SDE Sex&quot;\n\ndefine &quot;Initial Population&quot;:\n  VTE.&quot;Encounter With Age Range And Without VTE Diagnosis Or Obstetrical Conditions&quot;\n\ndefine &quot;Denominator&quot;:\n  &quot;Encounter With ICU Location&quot;\n\ndefine &quot;Encounter With ICU Location&quot;:\n  VTE.&quot;Encounter With Age Range And Without VTE Diagnosis Or Obstetrical Conditions&quot; QualifyingEncounter\n    where exists ( QualifyingEncounter.location Location\n        where Location.location.getLocation ( ).type in &quot;Intensive Care Unit&quot;\n          and Location.period during QualifyingEncounter.period\n    )\n\ndefine &quot;Denominator Exclusions&quot;:\n  &quot;Encounter With ICU Location And Encounter Less Than 2 Days&quot;\n    union &quot;Encounter With First ICU Stay With Principal Procedure Of Selected Surgery&quot;\n    union &quot;Encounter With Intervention Comfort Measures From Day Of Start Of Hospitalization To Day After First ICU Stay&quot;\n    union &quot;Encounter With Intervention Comfort Measures On Day Of Or Day After Procedure&quot;\n\ndefine &quot;Encounter With ICU Location And Encounter Less Than 2 Days&quot;:\n  &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n    where QualifyingEncounterICU.period.lengthInDays ( ) &lt; 2\n\ndefine &quot;Encounter With First ICU Stay With Principal Procedure Of Selected Surgery&quot;:\n  &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n    where QualifyingEncounterICU.hasPrincipalProcedureOf ( &quot;General Surgery&quot; )\n      or QualifyingEncounterICU.hasPrincipalProcedureOf ( &quot;Gynecological Surgery&quot; )\n      or QualifyingEncounterICU.hasPrincipalProcedureOf ( &quot;Hip Fracture Surgery&quot; )\n      or QualifyingEncounterICU.hasPrincipalProcedureOf ( &quot;Hip Replacement Surgery&quot; )\n      or QualifyingEncounterICU.hasPrincipalProcedureOf ( &quot;Intracranial Neurosurgery&quot; )\n      or QualifyingEncounterICU.hasPrincipalProcedureOf ( &quot;Knee Replacement Surgery&quot; )\n      or QualifyingEncounterICU.hasPrincipalProcedureOf ( &quot;Urological Surgery&quot; )\n\ndefine &quot;Encounter With Intervention Comfort Measures From Day Of Start Of Hospitalization To Day After First ICU Stay&quot;:\n  &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n    with &quot;Intervention Comfort Measures&quot; ComfortMeasure\n      such that Coalesce(start of ComfortMeasure.performed.toInterval(), ComfortMeasure.authoredOn) during day of QualifyingEncounterICU.fromDayOfStartOfHospitalizationToDayAfterFirstICU ( )\n\ndefine &quot;Intervention Comfort Measures&quot;:\n  ( [&quot;ServiceRequest&quot;: &quot;Comfort Measures&quot;] InterventionRequest\n      where InterventionRequest.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n        and InterventionRequest.status in { 'active', 'completed' }\n  )\n    union ( [&quot;Procedure&quot;: &quot;Comfort Measures&quot;] InterventionPerformed\n        where InterventionPerformed.status in { 'completed', 'in-progress' }\n    )\n\ndefine &quot;Encounter With Intervention Comfort Measures On Day Of Or Day After Procedure&quot;:\n  from\n    &quot;Encounter With ICU Location&quot; QualifyingEncounterICU,\n    [&quot;Procedure&quot;: &quot;General or Neuraxial Anesthesia&quot;] AnesthesiaProcedure,\n    &quot;Intervention Comfort Measures&quot; ComfortMeasure\n    where AnesthesiaProcedure.status = 'completed'\n      and AnesthesiaProcedure.performed.toInterval ( ) ends 1 day after day of QualifyingEncounterICU.startOfFirstICU ( )\n      and Coalesce(start of ComfortMeasure.performed.toInterval(), ComfortMeasure.authoredOn) during day of ( end of AnesthesiaProcedure.performed.toInterval ( ) ).calendarDayOfOrDayAfter ( )\n    return QualifyingEncounterICU\n\ndefine &quot;Numerator&quot;:\n  &quot;Encounter With VTE Prophylaxis Received On Day Of Or Day After First ICU Stay Or Procedure&quot;\n    union ( &quot;Encounter With Medication Oral Factor Xa Inhibitor Administered On Day Of Or Day After First ICU Stay Or Procedure&quot;\n        intersect ( &quot;Encounter With Prior Or Present Diagnosis Of Atrial Fibrillation Or Prior Diagnosis Of VTE&quot;\n            union &quot;Encounter With Prior Or Present Procedure Of Hip Or Knee Replacement Surgery&quot;\n        )\n    )\n    union &quot;Encounter With Low Risk For VTE Or Anticoagulant Administered&quot;\n    union &quot;Encounter With No VTE Prophylaxis Due To Medical Reason&quot;\n    union &quot;Encounter With No VTE Prophylaxis Due To Patient Refusal&quot;\n\ndefine &quot;Pharmacological Or Mechanical VTE Prophylaxis Received&quot;:\n  ( [&quot;MedicationAdministration&quot;: &quot;Low Dose Unfractionated Heparin for VTE Prophylaxis&quot;] VTEMedication\n      where VTEMedication.status = 'completed'\n        and VTEMedication.dosage.route in &quot;Subcutaneous route&quot;\n  )\n    union ( [&quot;MedicationAdministration&quot;: &quot;Low Molecular Weight Heparin for VTE Prophylaxis&quot;] LMWH\n        where LMWH.status = 'completed'\n    )\n    union ( [&quot;MedicationAdministration&quot;: &quot;Injectable Factor Xa Inhibitor for VTE Prophylaxis&quot;] FactorXa\n        where FactorXa.status = 'completed'\n    )\n    union ( [&quot;MedicationAdministration&quot;: &quot;Warfarin&quot;] WarfarinAdm\n        where WarfarinAdm.status = 'completed'\n    )\n    union ( [&quot;MedicationAdministration&quot;: &quot;Rivaroxaban for VTE Prophylaxis&quot;] Rivaroxaban\n        where Rivaroxaban.status = 'completed'\n    )\n    union ( ( [&quot;Procedure&quot;: &quot;Application of Intermittent Pneumatic Compression Devices&quot;]\n        union [&quot;Procedure&quot;: &quot;Application of Venous Foot Pumps&quot;]\n        union [&quot;Procedure&quot;: &quot;Application of Graduated Compression Stockings&quot;] ) DeviceApplied\n        where DeviceApplied.status = 'completed'\n    )\n\ndefine &quot;Encounter With VTE Prophylaxis Received On Day Of Or Day After First ICU Stay Or Procedure&quot;:\n  ( &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n      with &quot;Pharmacological Or Mechanical VTE Prophylaxis Received&quot; VTEProphylaxis\n        such that start of Coalesce(VTEProphylaxis.effective.toInterval(), VTEProphylaxis.performed.toInterval()) during day of QualifyingEncounterICU.startOfFirstICU ( ).calendarDayOfOrDayAfter ( )\n  )\n    union ( from\n        &quot;Encounter With ICU Location&quot; QualifyingEncounterICU,\n        [&quot;Procedure&quot;: &quot;General or Neuraxial Anesthesia&quot;] AnesthesiaProcedure,\n        &quot;Pharmacological Or Mechanical VTE Prophylaxis Received&quot; VTEProphylaxis\n        where AnesthesiaProcedure.status = 'completed'\n          and AnesthesiaProcedure.performed.toInterval ( ) ends 1 day after day of QualifyingEncounterICU.startOfFirstICU ( )\n          and start of Coalesce(VTEProphylaxis.effective.toInterval(), VTEProphylaxis.performed.toInterval()) during day of ( end of AnesthesiaProcedure.performed.toInterval ( ) ).calendarDayOfOrDayAfter ( )\n        return QualifyingEncounterICU\n    )\n\ndefine &quot;Encounter With Medication Oral Factor Xa Inhibitor Administered On Day Of Or Day After First ICU Stay Or Procedure&quot;:\n  ( &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n      with [&quot;MedicationAdministration&quot;: &quot;Oral Factor Xa Inhibitor for VTE Prophylaxis or VTE Treatment&quot;] FactorXaMedication\n        such that FactorXaMedication.status = 'completed'\n          and FactorXaMedication.effective.toInterval ( ) starts during day of QualifyingEncounterICU.startOfFirstICU ( ).calendarDayOfOrDayAfter ( )\n  )\n    union ( from\n        &quot;Encounter With ICU Location&quot; QualifyingEncounterICU,\n        [&quot;Procedure&quot;: &quot;General or Neuraxial Anesthesia&quot;] AnesthesiaProcedure,\n        [&quot;MedicationAdministration&quot;: &quot;Oral Factor Xa Inhibitor for VTE Prophylaxis or VTE Treatment&quot;] FactorXaMedication\n        where FactorXaMedication.status = 'completed'\n          and AnesthesiaProcedure.status = 'completed'\n          and AnesthesiaProcedure.performed.toInterval ( ) ends 1 day after day of QualifyingEncounterICU.startOfFirstICU ( )\n          and FactorXaMedication.effective.toInterval ( ) starts during day of ( end of AnesthesiaProcedure.performed.toInterval ( ) ).calendarDayOfOrDayAfter ( )\n        return QualifyingEncounterICU\n    )\n\ndefine &quot;Encounter With Prior Or Present Diagnosis Of Atrial Fibrillation Or Prior Diagnosis Of VTE&quot;:\n  ( &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n      with [&quot;ConditionProblemsHealthConcerns&quot;: &quot;Atrial Fibrillation or Flutter&quot;] AtrialFibrillation\n        such that AtrialFibrillation.verificationStatus is not null implies ( AtrialFibrillation.verificationStatus !~ Status.&quot;refuted&quot;\n            and AtrialFibrillation.verificationStatus !~ Status.&quot;entered-in-error&quot;\n        )\n          and AtrialFibrillation.prevalenceInterval ( ) starts on or before end of QualifyingEncounterICU.period\n  )\n    union ( &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n        where QualifyingEncounterICU.hasEncDiagnosisOf ( &quot;Atrial Fibrillation or Flutter&quot; )\n    )\n    union ( &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n        with [&quot;ConditionProblemsHealthConcerns&quot;: &quot;Venous Thromboembolism&quot;] VTEDiagnosis\n          such that ( VTEDiagnosis.clinicalStatus ~ Status.&quot;inactive&quot;\n              or VTEDiagnosis.clinicalStatus ~ Status.&quot;remission&quot;\n              or VTEDiagnosis.clinicalStatus ~ Status.&quot;resolved&quot;\n          )\n            and VTEDiagnosis.verificationStatus is not null implies ( VTEDiagnosis.verificationStatus !~ Status.&quot;refuted&quot;\n              and VTEDiagnosis.verificationStatus !~ Status.&quot;entered-in-error&quot;\n          )\n            and VTEDiagnosis.prevalenceInterval ( ) before start of QualifyingEncounterICU.period\n    )\n\ndefine &quot;Encounter With Prior Or Present Procedure Of Hip Or Knee Replacement Surgery&quot;:\n  &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n    with ( [&quot;Procedure&quot;: &quot;Hip Replacement Surgery&quot;]\n      union [&quot;Procedure&quot;: &quot;Knee Replacement Surgery&quot;] ) HipKneeProcedure\n      such that HipKneeProcedure.status = 'completed'\n        and HipKneeProcedure.performed.toInterval ( ) starts on or before end of QualifyingEncounterICU.period\n\ndefine &quot;Encounter With Low Risk For VTE Or Anticoagulant Administered&quot;:\n  &quot;Low Risk For VTE Or Anticoagulant Administered From Day Of Start Of Hospitalization To Day After First ICU Stay&quot;\n    union &quot;Low Risk For VTE Or Anticoagulant Administered On Day Of Or Day After Procedure&quot;\n\ndefine &quot;Low Risk Indicator For VTE&quot;:\n  ( [&quot;SimpleObservation&quot;: &quot;Risk for venous thromboembolism&quot;] VTERiskAssessment\n      where VTERiskAssessment.value as CodeableConcept in &quot;Low Risk&quot;\n        and VTERiskAssessment.status in { 'final', 'amended', 'corrected' }\n      return {\n        id: VTERiskAssessment.id,\n        LowRiskDatetime: VTERiskAssessment.effective.earliest ( )\n      }\n  )\n    union ( [&quot;LaboratoryResultObservation&quot;: &quot;INR&quot;] INRLabTest\n        where INRLabTest.value as Quantity &gt; 3.0\n          and INRLabTest.status in { 'final', 'amended', 'corrected' }\n        return {\n          id: INRLabTest.id,\n          LowRiskDatetime: INRLabTest.issued\n        }\n    )\n    union ( ( ( [&quot;MedicationAdministration&quot;: &quot;Unfractionated Heparin&quot;] UnfractionatedHeparin\n          where UnfractionatedHeparin.dosage.route in &quot;Intravenous route&quot;\n      )\n        union [&quot;MedicationAdministration&quot;: &quot;Direct Thrombin Inhibitor&quot;]\n        union [&quot;MedicationAdministration&quot;: &quot;Glycoprotein IIb IIIa Inhibitors&quot;] ) AnticoagulantMedication\n        where AnticoagulantMedication.status = 'completed'\n        return {\n          id: AnticoagulantMedication.id,\n          LowRiskDatetime: start of AnticoagulantMedication.effective.toInterval ( )\n        }\n    )\n\ndefine &quot;Low Risk For VTE Or Anticoagulant Administered From Day Of Start Of Hospitalization To Day After First ICU Stay&quot;:\n  &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n    with &quot;Low Risk Indicator For VTE&quot; LowRiskForVTE\n      such that LowRiskForVTE.LowRiskDatetime during day of QualifyingEncounterICU.fromDayOfStartOfHospitalizationToDayAfterFirstICU ( )\n\ndefine &quot;Low Risk For VTE Or Anticoagulant Administered On Day Of Or Day After Procedure&quot;:\n  from\n    &quot;Encounter With ICU Location&quot; QualifyingEncounterICU,\n    [&quot;Procedure&quot;: &quot;General or Neuraxial Anesthesia&quot;] AnesthesiaProcedure,\n    &quot;Low Risk Indicator For VTE&quot; LowRiskForVTE\n    where AnesthesiaProcedure.status = 'completed'\n      and AnesthesiaProcedure.performed.toInterval ( ) ends 1 day after day of QualifyingEncounterICU.startOfFirstICU ( )\n      and LowRiskForVTE.LowRiskDatetime during day of ( end of AnesthesiaProcedure.performed.toInterval ( ) ).calendarDayOfOrDayAfter ( )\n    return QualifyingEncounterICU\n\ndefine &quot;Encounter With No VTE Prophylaxis Due To Medical Reason&quot;:\n  ( &quot;No VTE Prophylaxis Medication Due To Medical Reason From Day Of Start Of Hospitalization To Day After First ICU Stay&quot;\n      intersect &quot;No Mechanical VTE Prophylaxis Due To Medical Reason From Day Of Start Of Hospitalization To Day After First ICU Stay&quot;\n  )\n    union ( &quot;No VTE Prophylaxis Medication Due To Medical Reason On Day Of Or Day After Procedure&quot;\n        intersect &quot;No Mechanical VTE Prophylaxis Due To Medical Reason On Day Of Or Day After Procedure&quot;\n    )\n\ndefine &quot;No VTE Prophylaxis Medication Due To Medical Reason From Day Of Start Of Hospitalization To Day After First ICU Stay&quot;:\n  &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n    with &quot;No VTE Prophylaxis Medication Administered Or Ordered&quot; NoVTEMedication\n      such that NoVTEMedication.medicationStatusReason in &quot;Medical Reason For Not Providing Treatment&quot;\n        and NoVTEMedication.authoredOn during day of QualifyingEncounterICU.fromDayOfStartOfHospitalizationToDayAfterFirstICU ( )\n\ndefine &quot;No VTE Prophylaxis Medication Administered Or Ordered&quot;:\n  ( ( [MedicationAdministrationNotDone: &quot;Low Dose Unfractionated Heparin for VTE Prophylaxis&quot;]\n      union [MedicationAdministrationNotDone: &quot;Low Molecular Weight Heparin for VTE Prophylaxis&quot;]\n      union [MedicationAdministrationNotDone: &quot;Injectable Factor Xa Inhibitor for VTE Prophylaxis&quot;]\n      union [MedicationAdministrationNotDone: &quot;Warfarin&quot;]\n      union [MedicationAdministrationNotDone: &quot;Rivaroxaban for VTE Prophylaxis&quot;] ) NoMedicationAdm\n      return {\n        id: NoMedicationAdm.id,\n        medicationStatusReason: NoMedicationAdm.statusReason,\n        authoredOn: NoMedicationAdm.effective\n      }\n  )\n    union ( ( [&quot;MedicationNotRequested&quot;: &quot;Low Dose Unfractionated Heparin for VTE Prophylaxis&quot;]\n        union [&quot;MedicationNotRequested&quot;: &quot;Low Molecular Weight Heparin for VTE Prophylaxis&quot;]\n        union [&quot;MedicationNotRequested&quot;: &quot;Injectable Factor Xa Inhibitor for VTE Prophylaxis&quot;]\n        union [&quot;MedicationNotRequested&quot;: &quot;Warfarin&quot;]\n        union [&quot;MedicationNotRequested&quot;: &quot;Rivaroxaban for VTE Prophylaxis&quot;] ) NoMedicationOrder\n        where NoMedicationOrder.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n          and NoMedicationOrder.status in { 'active', 'completed' }\n        return {\n          id: NoMedicationOrder.id,\n          medicationStatusReason: NoMedicationOrder.reasonCode,\n          authoredOn: NoMedicationOrder.authoredOn\n        }\n    )\n    union ( from\n        ( [&quot;MedicationRequest&quot;: &quot;Low Dose Unfractionated Heparin for VTE Prophylaxis&quot;]\n          union [&quot;MedicationRequest&quot;: &quot;Low Molecular Weight Heparin for VTE Prophylaxis&quot;]\n          union [&quot;MedicationRequest&quot;: &quot;Injectable Factor Xa Inhibitor for VTE Prophylaxis&quot;]\n          union [&quot;MedicationRequest&quot;: &quot;Warfarin&quot;]\n          union [&quot;MedicationRequest&quot;: &quot;Rivaroxaban for VTE Prophylaxis&quot;] ) MedicationOrderReject,\n        [TaskRejected] T\n        where T.focus.references ( MedicationOrderReject )\n          and T.code ~ USQualityCoreCommon.&quot;Fulfill&quot;\n          and MedicationOrderReject.status = 'active'\n        return {\n          id: MedicationOrderReject.id,\n          medicationStatusReason: { T.statusReason },\n          authoredOn: MedicationOrderReject.authoredOn\n        }\n    )\n\ndefine &quot;No Mechanical VTE Prophylaxis Due To Medical Reason From Day Of Start Of Hospitalization To Day After First ICU Stay&quot;:\n  &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n    with &quot;No Mechanical VTE Prophylaxis Performed Or Ordered&quot; NoVTEDevice\n      such that NoVTEDevice.requestStatusReason in &quot;Medical Reason For Not Providing Treatment&quot;\n        and NoVTEDevice.authoredOn during day of QualifyingEncounterICU.fromDayOfStartOfHospitalizationToDayAfterFirstICU ( )\n\ndefine &quot;No Mechanical VTE Prophylaxis Performed Or Ordered&quot;:\n  ( ( [ServiceNotRequested: &quot;Venous foot pumps&quot;]\n      union [ServiceNotRequested: &quot;Intermittent pneumatic compression devices&quot;]\n      union [ServiceNotRequested: &quot;Graduated compression stockings&quot;] ) DeviceNotOrder\n      where DeviceNotOrder.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n      return {\n        id: DeviceNotOrder.id,\n        requestStatusReason: DeviceNotOrder.reasonRefused ( ),\n        authoredOn: DeviceNotOrder.authoredOn\n      }\n  )\n    union ( from\n        ( [ServiceRequest: &quot;Venous foot pumps&quot;]\n          union [ServiceRequest: &quot;Intermittent pneumatic compression devices&quot;]\n          union [ServiceRequest: &quot;Graduated compression stockings&quot;] ) DeviceOrderReject,\n        [TaskRejected] T\n        where DeviceOrderReject.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n          and DeviceOrderReject.status = 'active'\n          and T.focus.references ( DeviceOrderReject )\n          and T.code ~ USQualityCoreCommon.&quot;Fulfill&quot;\n        return {\n          id: DeviceOrderReject.id,\n          requestStatusReason: T.statusReason,\n          authoredOn: DeviceOrderReject.authoredOn\n        }\n    )\n    union ( ( [ProcedureNotDone: &quot;Application of Intermittent Pneumatic Compression Devices&quot;]\n        union [ProcedureNotDone: &quot;Application of Venous Foot Pumps&quot;]\n        union [ProcedureNotDone: &quot;Application of Graduated Compression Stockings&quot;] ) DeviceNotApplied\n        let DeviceNotDoneTiming: DeviceNotApplied.performed\n        return {\n          id: DeviceNotApplied.id,\n          requestStatusReason: DeviceNotApplied.statusReason,\n          authoredOn: DeviceNotDoneTiming\n        }\n    )\n\ndefine &quot;No VTE Prophylaxis Medication Due To Medical Reason On Day Of Or Day After Procedure&quot;:\n  from\n    &quot;Encounter With ICU Location&quot; QualifyingEncounterICU,\n    [&quot;Procedure&quot;: &quot;General or Neuraxial Anesthesia&quot;] AnesthesiaProcedure,\n    &quot;No VTE Prophylaxis Medication Administered Or Ordered&quot; NoVTEMedication\n    where NoVTEMedication.medicationStatusReason in &quot;Medical Reason For Not Providing Treatment&quot;\n      and AnesthesiaProcedure.status = 'completed'\n      and AnesthesiaProcedure.performed.toInterval ( ) ends 1 day after day of QualifyingEncounterICU.startOfFirstICU ( )\n      and NoVTEMedication.authoredOn during day of ( end of AnesthesiaProcedure.performed.toInterval ( ) ).calendarDayOfOrDayAfter ( )\n    return QualifyingEncounterICU\n\ndefine &quot;No Mechanical VTE Prophylaxis Due To Medical Reason On Day Of Or Day After Procedure&quot;:\n  from\n    &quot;Encounter With ICU Location&quot; QualifyingEncounterICU,\n    [&quot;Procedure&quot;: &quot;General or Neuraxial Anesthesia&quot;] AnesthesiaProcedure,\n    &quot;No Mechanical VTE Prophylaxis Performed Or Ordered&quot; NoVTEDevice\n    where NoVTEDevice.requestStatusReason in &quot;Medical Reason For Not Providing Treatment&quot;\n      and AnesthesiaProcedure.status = 'completed'\n      and AnesthesiaProcedure.performed.toInterval ( ) ends 1 day after day of QualifyingEncounterICU.startOfFirstICU ( )\n      and NoVTEDevice.authoredOn during day of ( end of AnesthesiaProcedure.performed.toInterval ( ) ).calendarDayOfOrDayAfter ( )\n    return QualifyingEncounterICU\n\ndefine &quot;Encounter With No VTE Prophylaxis Due To Patient Refusal&quot;:\n  &quot;No VTE Prophylaxis Due To Patient Refusal From Day Of Start Of Hospitalization To Day After First ICU Stay&quot;\n    union &quot;No VTE Prophylaxis Due To Patient Refusal On Day Of Or Day After Procedure&quot;\n\ndefine &quot;No VTE Prophylaxis Due To Patient Refusal From Day Of Start Of Hospitalization To Day After First ICU Stay&quot;:\n  &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n    with &quot;No Mechanical or Pharmacological VTE Prophylaxis Due To Patient Refusal&quot; PatientRefusal\n      such that PatientRefusal.authoredOn during day of QualifyingEncounterICU.fromDayOfStartOfHospitalizationToDayAfterFirstICU ( )\n\ndefine &quot;No VTE Prophylaxis Due To Patient Refusal On Day Of Or Day After Procedure&quot;:\n  from\n    &quot;Encounter With ICU Location&quot; QualifyingEncounterICU,\n    [&quot;Procedure&quot;: &quot;General or Neuraxial Anesthesia&quot;] AnesthesiaProcedure,\n    &quot;No Mechanical or Pharmacological VTE Prophylaxis Due To Patient Refusal&quot; PatientRefusal\n    where AnesthesiaProcedure.status = 'completed'\n      and AnesthesiaProcedure.performed.toInterval ( ) ends 1 day after day of QualifyingEncounterICU.startOfFirstICU ( )\n      and PatientRefusal.authoredOn during day of ( end of AnesthesiaProcedure.performed.toInterval ( ) ).calendarDayOfOrDayAfter ( )\n    return QualifyingEncounterICU\n\ndefine &quot;No Mechanical or Pharmacological VTE Prophylaxis Due To Patient Refusal&quot;:\n  ( &quot;No VTE Prophylaxis Medication Administered Or Ordered&quot; NoVTEMedication\n      where NoVTEMedication.medicationStatusReason in &quot;Patient Refusal&quot;\n  )\n    union ( &quot;No Mechanical VTE Prophylaxis Performed Or Ordered&quot; NoVTEDevice\n        where NoVTEDevice.requestStatusReason in &quot;Patient Refusal&quot;\n    )\n\ndefine &quot;Denominator Exceptions&quot;:\n  &quot;Encounter With First ICU Location Stay Less Than 1 Day&quot;\n\ndefine &quot;Encounter With First ICU Location Stay Less Than 1 Day&quot;:\n  &quot;Encounter With ICU Location&quot; QualifyingEncounterICU\n    where QualifyingEncounterICU.firstInpatientIntensiveCareUnit ( ).period.lengthInDays ( ) &lt; 1\n\ndefine fluent function &quot;startOfFirstICU&quot;(Encounter Encounter):\n  start of Encounter.firstInpatientIntensiveCareUnit ( ).period\n\ndefine fluent function &quot;fromDayOfStartOfHospitalizationToDayAfterFirstICU&quot;(Encounter Encounter):\n  Interval[date from ( start of Encounter.hospitalizationWithObservation ( ) ), date from ( Encounter.startOfFirstICU ( ) ) + 1 day]</code></pre>\n      </td>\n    </tr>\n    \n  \n\n\n\n<tr>\n  <th colspan=\"2\" scope=\"row\" class=\"row-header\">Generated using version 0.5.6 of the sample-content-ig Liquid templates</th>\n</tr>\n\n    </tbody>\n  </table>\n</div>"
  },
  "extension" : [
    {
      "url" : "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem",
      "valueReference" : {
        "reference" : "Device/cqf-tooling"
      }
    }
  ],
  "url" : "https://madie.cms.gov/Library/CMS190FHIRVTEProphylaxisICU",
  "version" : "1.1.000",
  "name" : "CMS190FHIRVTEProphylaxisICU",
  "status" : "draft",
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library"
      }
    ]
  },
  "date" : "2026-09-19T16:31:14+00:00",
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVMxOTBGSElSVlRFUHJvcGh5bGF4aXNJQ1UgdmVyc2lvbiAnMS4xLjAwMCcKCnVzaW5nIFVTUXVhbGl0eUNvcmUgdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcKdXNpbmcgVVNDb3JlIHZlcnNpb24gJzYuMS4wLWRlcml2ZWQnCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjEnCgppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScgY2FsbGVkIEZISVJIZWxwZXJzCmluY2x1ZGUgaGw3LmZoaXIudXYuY3FsLkZISVJDb21tb24gdmVyc2lvbiAnMi4wLjAnIGNhbGxlZCBGSElSQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUNvbW1vbiB2ZXJzaW9uICcyLjAuMC1iYWxsb3QnIGNhbGxlZCBVU0NvcmVDb21tb24KaW5jbHVkZSBobDcuZmhpci51cy5jcWwuVVNDb3JlRWxlbWVudHMgdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlRWxlbWVudHMKCmluY2x1ZGUgQ1FNQ29tbW9uIHZlcnNpb24gJzUuMS4wMDAnIGNhbGxlZCBDUU1Db21tb24KaW5jbHVkZSBVU1F1YWxpdHlDb3JlQ29tbW9uIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnIGNhbGxlZCBVU1F1YWxpdHlDb3JlQ29tbW9uCmluY2x1ZGUgU3VwcGxlbWVudGFsRGF0YUVsZW1lbnRzIHZlcnNpb24gJzYuMS4wMDAnIGNhbGxlZCBTREUKaW5jbHVkZSBTdGF0dXMgdmVyc2lvbiAnMi4xLjAwMCcgY2FsbGVkIFN0YXR1cwppbmNsdWRlIFRKQ092ZXJhbGwgdmVyc2lvbiAnOS4xLjAwMCcgY2FsbGVkIFRKQwppbmNsdWRlIFZURSB2ZXJzaW9uICc5LjEuMDAwJyBjYWxsZWQgVlRFCgpjb2Rlc3lzdGVtICJMT0lOQyI6ICdodHRwOi8vbG9pbmMub3JnJwoKY29kZSAiUmlzayBmb3IgdmVub3VzIHRocm9tYm9lbWJvbGlzbSI6ICc3MjEzNi01JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnUmlzayBmb3IgdmVub3VzIHRocm9tYm9lbWJvbGlzbScKCnZhbHVlc2V0ICJBcHBsaWNhdGlvbiBvZiBHcmFkdWF0ZWQgQ29tcHJlc3Npb24gU3RvY2tpbmdzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTExMC42NicKdmFsdWVzZXQgIkFwcGxpY2F0aW9uIG9mIEludGVybWl0dGVudCBQbmV1bWF0aWMgQ29tcHJlc3Npb24gRGV2aWNlcyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExMTAuNjUnCnZhbHVlc2V0ICJBcHBsaWNhdGlvbiBvZiBWZW5vdXMgRm9vdCBQdW1wcyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExMTAuNjQnCnZhbHVlc2V0ICJBdHJpYWwgRmlicmlsbGF0aW9uIG9yIEZsdXR0ZXIiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuMTE3LjEuNy4xLjIwMicKdmFsdWVzZXQgIkNvbWZvcnQgTWVhc3VyZXMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzEuMy42LjEuNC4xLjMzODk1LjEuMy4wLjQ1Jwp2YWx1ZXNldCAiRGlyZWN0IFRocm9tYmluIEluaGliaXRvciI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy4xMTcuMS43LjEuMjA1Jwp2YWx1ZXNldCAiR2VuZXJhbCBvciBOZXVyYXhpYWwgQW5lc3RoZXNpYSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42NjYuNS4xNzQzJwp2YWx1ZXNldCAiR2VuZXJhbCBTdXJnZXJ5IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yNTUnCnZhbHVlc2V0ICJHbHljb3Byb3RlaW4gSUliIElJSWEgSW5oaWJpdG9ycyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEwNDUuNDEnCnZhbHVlc2V0ICJHcmFkdWF0ZWQgY29tcHJlc3Npb24gc3RvY2tpbmdzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yNTYnCnZhbHVlc2V0ICJHeW5lY29sb2dpY2FsIFN1cmdlcnkiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuMTE3LjEuNy4xLjI1NycKdmFsdWVzZXQgIkhpcCBGcmFjdHVyZSBTdXJnZXJ5IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yNTgnCnZhbHVlc2V0ICJIaXAgUmVwbGFjZW1lbnQgU3VyZ2VyeSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy4xMTcuMS43LjEuMjU5Jwp2YWx1ZXNldCAiSW5qZWN0YWJsZSBGYWN0b3IgWGEgSW5oaWJpdG9yIGZvciBWVEUgUHJvcGh5bGF4aXMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuMTE3LjEuNy4xLjIxMScKdmFsdWVzZXQgIklOUiI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy4xMTcuMS43LjEuMjEzJwp2YWx1ZXNldCAiSW50ZW5zaXZlIENhcmUgVW5pdCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEwMjkuMjA2Jwp2YWx1ZXNldCAiSW50ZXJtaXR0ZW50IHBuZXVtYXRpYyBjb21wcmVzc2lvbiBkZXZpY2VzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yMTQnCnZhbHVlc2V0ICJJbnRyYWNyYW5pYWwgTmV1cm9zdXJnZXJ5IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yNjAnCnZhbHVlc2V0ICJJbnRyYXZlbm91cyByb3V0ZSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy4xMTcuMS43LjEuMjIyJwp2YWx1ZXNldCAiS25lZSBSZXBsYWNlbWVudCBTdXJnZXJ5IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yNjEnCnZhbHVlc2V0ICJMb3cgRG9zZSBVbmZyYWN0aW9uYXRlZCBIZXBhcmluIGZvciBWVEUgUHJvcGh5bGF4aXMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ1LjM5Jwp2YWx1ZXNldCAiTG93IE1vbGVjdWxhciBXZWlnaHQgSGVwYXJpbiBmb3IgVlRFIFByb3BoeWxheGlzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yMTknCnZhbHVlc2V0ICJMb3cgUmlzayI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy4xMTcuMS43LjEuNDAwJwp2YWx1ZXNldCAiTWVkaWNhbCBSZWFzb24gRm9yIE5vdCBQcm92aWRpbmcgVHJlYXRtZW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS40NzMnCnZhbHVlc2V0ICJPcmFsIEZhY3RvciBYYSBJbmhpYml0b3IgZm9yIFZURSBQcm9waHlsYXhpcyBvciBWVEUgVHJlYXRtZW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4xMzQnCnZhbHVlc2V0ICJQYXRpZW50IFJlZnVzYWwiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuMTE3LjEuNy4xLjkzJwp2YWx1ZXNldCAiUml2YXJveGFiYW4gZm9yIFZURSBQcm9waHlsYXhpcyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExMTAuNTAnCnZhbHVlc2V0ICJTdWJjdXRhbmVvdXMgcm91dGUiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuMTE3LjEuNy4xLjIyMycKdmFsdWVzZXQgIlVuZnJhY3Rpb25hdGVkIEhlcGFyaW4iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuMTE3LjEuNy4xLjIxOCcKdmFsdWVzZXQgIlVyb2xvZ2ljYWwgU3VyZ2VyeSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy4xMTcuMS43LjEuMjcyJwp2YWx1ZXNldCAiVmVub3VzIGZvb3QgcHVtcHMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuMTE3LjEuNy4xLjIzMCcKdmFsdWVzZXQgIlZlbm91cyBUaHJvbWJvZW1ib2xpc20iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuMTE3LjEuNy4xLjI3OScKdmFsdWVzZXQgIldhcmZhcmluIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yMzInCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNy0wMS0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgIlNERSBFdGhuaWNpdHkiOgogIFNERS4iU0RFIEV0aG5pY2l0eSIKCmRlZmluZSAiU0RFIFBheWVyIjoKICBTREUuIlNERSBQYXllciIKCmRlZmluZSAiU0RFIFJhY2UiOgogIFNERS4iU0RFIFJhY2UiCgpkZWZpbmUgIlNERSBTZXgiOgogIFNERS4iU0RFIFNleCIKCmRlZmluZSAiSW5pdGlhbCBQb3B1bGF0aW9uIjoKICBWVEUuIkVuY291bnRlciBXaXRoIEFnZSBSYW5nZSBBbmQgV2l0aG91dCBWVEUgRGlhZ25vc2lzIE9yIE9ic3RldHJpY2FsIENvbmRpdGlvbnMiCgpkZWZpbmUgIkRlbm9taW5hdG9yIjoKICAiRW5jb3VudGVyIFdpdGggSUNVIExvY2F0aW9uIgoKZGVmaW5lICJFbmNvdW50ZXIgV2l0aCBJQ1UgTG9jYXRpb24iOgogIFZURS4iRW5jb3VudGVyIFdpdGggQWdlIFJhbmdlIEFuZCBXaXRob3V0IFZURSBEaWFnbm9zaXMgT3IgT2JzdGV0cmljYWwgQ29uZGl0aW9ucyIgUXVhbGlmeWluZ0VuY291bnRlcgogICAgd2hlcmUgZXhpc3RzICggUXVhbGlmeWluZ0VuY291bnRlci5sb2NhdGlvbiBMb2NhdGlvbgogICAgICAgIHdoZXJlIExvY2F0aW9uLmxvY2F0aW9uLmdldExvY2F0aW9uICggKS50eXBlIGluICJJbnRlbnNpdmUgQ2FyZSBVbml0IgogICAgICAgICAgYW5kIExvY2F0aW9uLnBlcmlvZCBkdXJpbmcgUXVhbGlmeWluZ0VuY291bnRlci5wZXJpb2QKICAgICkKCmRlZmluZSAiRGVub21pbmF0b3IgRXhjbHVzaW9ucyI6CiAgIkVuY291bnRlciBXaXRoIElDVSBMb2NhdGlvbiBBbmQgRW5jb3VudGVyIExlc3MgVGhhbiAyIERheXMiCiAgICB1bmlvbiAiRW5jb3VudGVyIFdpdGggRmlyc3QgSUNVIFN0YXkgV2l0aCBQcmluY2lwYWwgUHJvY2VkdXJlIE9mIFNlbGVjdGVkIFN1cmdlcnkiCiAgICB1bmlvbiAiRW5jb3VudGVyIFdpdGggSW50ZXJ2ZW50aW9uIENvbWZvcnQgTWVhc3VyZXMgRnJvbSBEYXkgT2YgU3RhcnQgT2YgSG9zcGl0YWxpemF0aW9uIFRvIERheSBBZnRlciBGaXJzdCBJQ1UgU3RheSIKICAgIHVuaW9uICJFbmNvdW50ZXIgV2l0aCBJbnRlcnZlbnRpb24gQ29tZm9ydCBNZWFzdXJlcyBPbiBEYXkgT2YgT3IgRGF5IEFmdGVyIFByb2NlZHVyZSIKCmRlZmluZSAiRW5jb3VudGVyIFdpdGggSUNVIExvY2F0aW9uIEFuZCBFbmNvdW50ZXIgTGVzcyBUaGFuIDIgRGF5cyI6CiAgIkVuY291bnRlciBXaXRoIElDVSBMb2NhdGlvbiIgUXVhbGlmeWluZ0VuY291bnRlcklDVQogICAgd2hlcmUgUXVhbGlmeWluZ0VuY291bnRlcklDVS5wZXJpb2QubGVuZ3RoSW5EYXlzICggKSA8IDIKCmRlZmluZSAiRW5jb3VudGVyIFdpdGggRmlyc3QgSUNVIFN0YXkgV2l0aCBQcmluY2lwYWwgUHJvY2VkdXJlIE9mIFNlbGVjdGVkIFN1cmdlcnkiOgogICJFbmNvdW50ZXIgV2l0aCBJQ1UgTG9jYXRpb24iIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UKICAgIHdoZXJlIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UuaGFzUHJpbmNpcGFsUHJvY2VkdXJlT2YgKCAiR2VuZXJhbCBTdXJnZXJ5IiApCiAgICAgIG9yIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UuaGFzUHJpbmNpcGFsUHJvY2VkdXJlT2YgKCAiR3luZWNvbG9naWNhbCBTdXJnZXJ5IiApCiAgICAgIG9yIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UuaGFzUHJpbmNpcGFsUHJvY2VkdXJlT2YgKCAiSGlwIEZyYWN0dXJlIFN1cmdlcnkiICkKICAgICAgb3IgUXVhbGlmeWluZ0VuY291bnRlcklDVS5oYXNQcmluY2lwYWxQcm9jZWR1cmVPZiAoICJIaXAgUmVwbGFjZW1lbnQgU3VyZ2VyeSIgKQogICAgICBvciBRdWFsaWZ5aW5nRW5jb3VudGVySUNVLmhhc1ByaW5jaXBhbFByb2NlZHVyZU9mICggIkludHJhY3JhbmlhbCBOZXVyb3N1cmdlcnkiICkKICAgICAgb3IgUXVhbGlmeWluZ0VuY291bnRlcklDVS5oYXNQcmluY2lwYWxQcm9jZWR1cmVPZiAoICJLbmVlIFJlcGxhY2VtZW50IFN1cmdlcnkiICkKICAgICAgb3IgUXVhbGlmeWluZ0VuY291bnRlcklDVS5oYXNQcmluY2lwYWxQcm9jZWR1cmVPZiAoICJVcm9sb2dpY2FsIFN1cmdlcnkiICkKCmRlZmluZSAiRW5jb3VudGVyIFdpdGggSW50ZXJ2ZW50aW9uIENvbWZvcnQgTWVhc3VyZXMgRnJvbSBEYXkgT2YgU3RhcnQgT2YgSG9zcGl0YWxpemF0aW9uIFRvIERheSBBZnRlciBGaXJzdCBJQ1UgU3RheSI6CiAgIkVuY291bnRlciBXaXRoIElDVSBMb2NhdGlvbiIgUXVhbGlmeWluZ0VuY291bnRlcklDVQogICAgd2l0aCAiSW50ZXJ2ZW50aW9uIENvbWZvcnQgTWVhc3VyZXMiIENvbWZvcnRNZWFzdXJlCiAgICAgIHN1Y2ggdGhhdCBDb2FsZXNjZShzdGFydCBvZiBDb21mb3J0TWVhc3VyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCgpLCBDb21mb3J0TWVhc3VyZS5hdXRob3JlZE9uKSBkdXJpbmcgZGF5IG9mIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UuZnJvbURheU9mU3RhcnRPZkhvc3BpdGFsaXphdGlvblRvRGF5QWZ0ZXJGaXJzdElDVSAoICkKCmRlZmluZSAiSW50ZXJ2ZW50aW9uIENvbWZvcnQgTWVhc3VyZXMiOgogICggWyJTZXJ2aWNlUmVxdWVzdCI6ICJDb21mb3J0IE1lYXN1cmVzIl0gSW50ZXJ2ZW50aW9uUmVxdWVzdAogICAgICB3aGVyZSBJbnRlcnZlbnRpb25SZXF1ZXN0LmludGVudCBpbiB7ICdvcmRlcicsICdvcmlnaW5hbC1vcmRlcicsICdyZWZsZXgtb3JkZXInLCAnZmlsbGVyLW9yZGVyJywgJ2luc3RhbmNlLW9yZGVyJyB9CiAgICAgICAgYW5kIEludGVydmVudGlvblJlcXVlc3Quc3RhdHVzIGluIHsgJ2FjdGl2ZScsICdjb21wbGV0ZWQnIH0KICApCiAgICB1bmlvbiAoIFsiUHJvY2VkdXJlIjogIkNvbWZvcnQgTWVhc3VyZXMiXSBJbnRlcnZlbnRpb25QZXJmb3JtZWQKICAgICAgICB3aGVyZSBJbnRlcnZlbnRpb25QZXJmb3JtZWQuc3RhdHVzIGluIHsgJ2NvbXBsZXRlZCcsICdpbi1wcm9ncmVzcycgfQogICAgKQoKZGVmaW5lICJFbmNvdW50ZXIgV2l0aCBJbnRlcnZlbnRpb24gQ29tZm9ydCBNZWFzdXJlcyBPbiBEYXkgT2YgT3IgRGF5IEFmdGVyIFByb2NlZHVyZSI6CiAgZnJvbQogICAgIkVuY291bnRlciBXaXRoIElDVSBMb2NhdGlvbiIgUXVhbGlmeWluZ0VuY291bnRlcklDVSwKICAgIFsiUHJvY2VkdXJlIjogIkdlbmVyYWwgb3IgTmV1cmF4aWFsIEFuZXN0aGVzaWEiXSBBbmVzdGhlc2lhUHJvY2VkdXJlLAogICAgIkludGVydmVudGlvbiBDb21mb3J0IE1lYXN1cmVzIiBDb21mb3J0TWVhc3VyZQogICAgd2hlcmUgQW5lc3RoZXNpYVByb2NlZHVyZS5zdGF0dXMgPSAnY29tcGxldGVkJwogICAgICBhbmQgQW5lc3RoZXNpYVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgZW5kcyAxIGRheSBhZnRlciBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlcklDVS5zdGFydE9mRmlyc3RJQ1UgKCApCiAgICAgIGFuZCBDb2FsZXNjZShzdGFydCBvZiBDb21mb3J0TWVhc3VyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCgpLCBDb21mb3J0TWVhc3VyZS5hdXRob3JlZE9uKSBkdXJpbmcgZGF5IG9mICggZW5kIG9mIEFuZXN0aGVzaWFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkuY2FsZW5kYXJEYXlPZk9yRGF5QWZ0ZXIgKCApCiAgICByZXR1cm4gUXVhbGlmeWluZ0VuY291bnRlcklDVQoKZGVmaW5lICJOdW1lcmF0b3IiOgogICJFbmNvdW50ZXIgV2l0aCBWVEUgUHJvcGh5bGF4aXMgUmVjZWl2ZWQgT24gRGF5IE9mIE9yIERheSBBZnRlciBGaXJzdCBJQ1UgU3RheSBPciBQcm9jZWR1cmUiCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgV2l0aCBNZWRpY2F0aW9uIE9yYWwgRmFjdG9yIFhhIEluaGliaXRvciBBZG1pbmlzdGVyZWQgT24gRGF5IE9mIE9yIERheSBBZnRlciBGaXJzdCBJQ1UgU3RheSBPciBQcm9jZWR1cmUiCiAgICAgICAgaW50ZXJzZWN0ICggIkVuY291bnRlciBXaXRoIFByaW9yIE9yIFByZXNlbnQgRGlhZ25vc2lzIE9mIEF0cmlhbCBGaWJyaWxsYXRpb24gT3IgUHJpb3IgRGlhZ25vc2lzIE9mIFZURSIKICAgICAgICAgICAgdW5pb24gIkVuY291bnRlciBXaXRoIFByaW9yIE9yIFByZXNlbnQgUHJvY2VkdXJlIE9mIEhpcCBPciBLbmVlIFJlcGxhY2VtZW50IFN1cmdlcnkiCiAgICAgICAgKQogICAgKQogICAgdW5pb24gIkVuY291bnRlciBXaXRoIExvdyBSaXNrIEZvciBWVEUgT3IgQW50aWNvYWd1bGFudCBBZG1pbmlzdGVyZWQiCiAgICB1bmlvbiAiRW5jb3VudGVyIFdpdGggTm8gVlRFIFByb3BoeWxheGlzIER1ZSBUbyBNZWRpY2FsIFJlYXNvbiIKICAgIHVuaW9uICJFbmNvdW50ZXIgV2l0aCBObyBWVEUgUHJvcGh5bGF4aXMgRHVlIFRvIFBhdGllbnQgUmVmdXNhbCIKCmRlZmluZSAiUGhhcm1hY29sb2dpY2FsIE9yIE1lY2hhbmljYWwgVlRFIFByb3BoeWxheGlzIFJlY2VpdmVkIjoKICAoIFsiTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uIjogIkxvdyBEb3NlIFVuZnJhY3Rpb25hdGVkIEhlcGFyaW4gZm9yIFZURSBQcm9waHlsYXhpcyJdIFZURU1lZGljYXRpb24KICAgICAgd2hlcmUgVlRFTWVkaWNhdGlvbi5zdGF0dXMgPSAnY29tcGxldGVkJwogICAgICAgIGFuZCBWVEVNZWRpY2F0aW9uLmRvc2FnZS5yb3V0ZSBpbiAiU3ViY3V0YW5lb3VzIHJvdXRlIgogICkKICAgIHVuaW9uICggWyJNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb24iOiAiTG93IE1vbGVjdWxhciBXZWlnaHQgSGVwYXJpbiBmb3IgVlRFIFByb3BoeWxheGlzIl0gTE1XSAogICAgICAgIHdoZXJlIExNV0guc3RhdHVzID0gJ2NvbXBsZXRlZCcKICAgICkKICAgIHVuaW9uICggWyJNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb24iOiAiSW5qZWN0YWJsZSBGYWN0b3IgWGEgSW5oaWJpdG9yIGZvciBWVEUgUHJvcGh5bGF4aXMiXSBGYWN0b3JYYQogICAgICAgIHdoZXJlIEZhY3RvclhhLnN0YXR1cyA9ICdjb21wbGV0ZWQnCiAgICApCiAgICB1bmlvbiAoIFsiTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uIjogIldhcmZhcmluIl0gV2FyZmFyaW5BZG0KICAgICAgICB3aGVyZSBXYXJmYXJpbkFkbS5zdGF0dXMgPSAnY29tcGxldGVkJwogICAgKQogICAgdW5pb24gKCBbIk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbiI6ICJSaXZhcm94YWJhbiBmb3IgVlRFIFByb3BoeWxheGlzIl0gUml2YXJveGFiYW4KICAgICAgICB3aGVyZSBSaXZhcm94YWJhbi5zdGF0dXMgPSAnY29tcGxldGVkJwogICAgKQogICAgdW5pb24gKCAoIFsiUHJvY2VkdXJlIjogIkFwcGxpY2F0aW9uIG9mIEludGVybWl0dGVudCBQbmV1bWF0aWMgQ29tcHJlc3Npb24gRGV2aWNlcyJdCiAgICAgICAgdW5pb24gWyJQcm9jZWR1cmUiOiAiQXBwbGljYXRpb24gb2YgVmVub3VzIEZvb3QgUHVtcHMiXQogICAgICAgIHVuaW9uIFsiUHJvY2VkdXJlIjogIkFwcGxpY2F0aW9uIG9mIEdyYWR1YXRlZCBDb21wcmVzc2lvbiBTdG9ja2luZ3MiXSApIERldmljZUFwcGxpZWQKICAgICAgICB3aGVyZSBEZXZpY2VBcHBsaWVkLnN0YXR1cyA9ICdjb21wbGV0ZWQnCiAgICApCgpkZWZpbmUgIkVuY291bnRlciBXaXRoIFZURSBQcm9waHlsYXhpcyBSZWNlaXZlZCBPbiBEYXkgT2YgT3IgRGF5IEFmdGVyIEZpcnN0IElDVSBTdGF5IE9yIFByb2NlZHVyZSI6CiAgKCAiRW5jb3VudGVyIFdpdGggSUNVIExvY2F0aW9uIiBRdWFsaWZ5aW5nRW5jb3VudGVySUNVCiAgICAgIHdpdGggIlBoYXJtYWNvbG9naWNhbCBPciBNZWNoYW5pY2FsIFZURSBQcm9waHlsYXhpcyBSZWNlaXZlZCIgVlRFUHJvcGh5bGF4aXMKICAgICAgICBzdWNoIHRoYXQgc3RhcnQgb2YgQ29hbGVzY2UoVlRFUHJvcGh5bGF4aXMuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSwgVlRFUHJvcGh5bGF4aXMucGVyZm9ybWVkLnRvSW50ZXJ2YWwoKSkgZHVyaW5nIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVySUNVLnN0YXJ0T2ZGaXJzdElDVSAoICkuY2FsZW5kYXJEYXlPZk9yRGF5QWZ0ZXIgKCApCiAgKQogICAgdW5pb24gKCBmcm9tCiAgICAgICAgIkVuY291bnRlciBXaXRoIElDVSBMb2NhdGlvbiIgUXVhbGlmeWluZ0VuY291bnRlcklDVSwKICAgICAgICBbIlByb2NlZHVyZSI6ICJHZW5lcmFsIG9yIE5ldXJheGlhbCBBbmVzdGhlc2lhIl0gQW5lc3RoZXNpYVByb2NlZHVyZSwKICAgICAgICAiUGhhcm1hY29sb2dpY2FsIE9yIE1lY2hhbmljYWwgVlRFIFByb3BoeWxheGlzIFJlY2VpdmVkIiBWVEVQcm9waHlsYXhpcwogICAgICAgIHdoZXJlIEFuZXN0aGVzaWFQcm9jZWR1cmUuc3RhdHVzID0gJ2NvbXBsZXRlZCcKICAgICAgICAgIGFuZCBBbmVzdGhlc2lhUHJvY2VkdXJlLnBlcmZvcm1lZC50b0ludGVydmFsICggKSBlbmRzIDEgZGF5IGFmdGVyIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVySUNVLnN0YXJ0T2ZGaXJzdElDVSAoICkKICAgICAgICAgIGFuZCBzdGFydCBvZiBDb2FsZXNjZShWVEVQcm9waHlsYXhpcy5lZmZlY3RpdmUudG9JbnRlcnZhbCgpLCBWVEVQcm9waHlsYXhpcy5wZXJmb3JtZWQudG9JbnRlcnZhbCgpKSBkdXJpbmcgZGF5IG9mICggZW5kIG9mIEFuZXN0aGVzaWFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkuY2FsZW5kYXJEYXlPZk9yRGF5QWZ0ZXIgKCApCiAgICAgICAgcmV0dXJuIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UKICAgICkKCmRlZmluZSAiRW5jb3VudGVyIFdpdGggTWVkaWNhdGlvbiBPcmFsIEZhY3RvciBYYSBJbmhpYml0b3IgQWRtaW5pc3RlcmVkIE9uIERheSBPZiBPciBEYXkgQWZ0ZXIgRmlyc3QgSUNVIFN0YXkgT3IgUHJvY2VkdXJlIjoKICAoICJFbmNvdW50ZXIgV2l0aCBJQ1UgTG9jYXRpb24iIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UKICAgICAgd2l0aCBbIk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbiI6ICJPcmFsIEZhY3RvciBYYSBJbmhpYml0b3IgZm9yIFZURSBQcm9waHlsYXhpcyBvciBWVEUgVHJlYXRtZW50Il0gRmFjdG9yWGFNZWRpY2F0aW9uCiAgICAgICAgc3VjaCB0aGF0IEZhY3RvclhhTWVkaWNhdGlvbi5zdGF0dXMgPSAnY29tcGxldGVkJwogICAgICAgICAgYW5kIEZhY3RvclhhTWVkaWNhdGlvbi5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICkgc3RhcnRzIGR1cmluZyBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlcklDVS5zdGFydE9mRmlyc3RJQ1UgKCApLmNhbGVuZGFyRGF5T2ZPckRheUFmdGVyICggKQogICkKICAgIHVuaW9uICggZnJvbQogICAgICAgICJFbmNvdW50ZXIgV2l0aCBJQ1UgTG9jYXRpb24iIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UsCiAgICAgICAgWyJQcm9jZWR1cmUiOiAiR2VuZXJhbCBvciBOZXVyYXhpYWwgQW5lc3RoZXNpYSJdIEFuZXN0aGVzaWFQcm9jZWR1cmUsCiAgICAgICAgWyJNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb24iOiAiT3JhbCBGYWN0b3IgWGEgSW5oaWJpdG9yIGZvciBWVEUgUHJvcGh5bGF4aXMgb3IgVlRFIFRyZWF0bWVudCJdIEZhY3RvclhhTWVkaWNhdGlvbgogICAgICAgIHdoZXJlIEZhY3RvclhhTWVkaWNhdGlvbi5zdGF0dXMgPSAnY29tcGxldGVkJwogICAgICAgICAgYW5kIEFuZXN0aGVzaWFQcm9jZWR1cmUuc3RhdHVzID0gJ2NvbXBsZXRlZCcKICAgICAgICAgIGFuZCBBbmVzdGhlc2lhUHJvY2VkdXJlLnBlcmZvcm1lZC50b0ludGVydmFsICggKSBlbmRzIDEgZGF5IGFmdGVyIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVySUNVLnN0YXJ0T2ZGaXJzdElDVSAoICkKICAgICAgICAgIGFuZCBGYWN0b3JYYU1lZGljYXRpb24uZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIHN0YXJ0cyBkdXJpbmcgZGF5IG9mICggZW5kIG9mIEFuZXN0aGVzaWFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkuY2FsZW5kYXJEYXlPZk9yRGF5QWZ0ZXIgKCApCiAgICAgICAgcmV0dXJuIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UKICAgICkKCmRlZmluZSAiRW5jb3VudGVyIFdpdGggUHJpb3IgT3IgUHJlc2VudCBEaWFnbm9zaXMgT2YgQXRyaWFsIEZpYnJpbGxhdGlvbiBPciBQcmlvciBEaWFnbm9zaXMgT2YgVlRFIjoKICAoICJFbmNvdW50ZXIgV2l0aCBJQ1UgTG9jYXRpb24iIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UKICAgICAgd2l0aCBbIkNvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnMiOiAiQXRyaWFsIEZpYnJpbGxhdGlvbiBvciBGbHV0dGVyIl0gQXRyaWFsRmlicmlsbGF0aW9uCiAgICAgICAgc3VjaCB0aGF0IEF0cmlhbEZpYnJpbGxhdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgaXMgbm90IG51bGwgaW1wbGllcyAoIEF0cmlhbEZpYnJpbGxhdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgIX4gU3RhdHVzLiJyZWZ1dGVkIgogICAgICAgICAgICBhbmQgQXRyaWFsRmlicmlsbGF0aW9uLnZlcmlmaWNhdGlvblN0YXR1cyAhfiBTdGF0dXMuImVudGVyZWQtaW4tZXJyb3IiCiAgICAgICAgKQogICAgICAgICAgYW5kIEF0cmlhbEZpYnJpbGxhdGlvbi5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIHN0YXJ0cyBvbiBvciBiZWZvcmUgZW5kIG9mIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UucGVyaW9kCiAgKQogICAgdW5pb24gKCAiRW5jb3VudGVyIFdpdGggSUNVIExvY2F0aW9uIiBRdWFsaWZ5aW5nRW5jb3VudGVySUNVCiAgICAgICAgd2hlcmUgUXVhbGlmeWluZ0VuY291bnRlcklDVS5oYXNFbmNEaWFnbm9zaXNPZiAoICJBdHJpYWwgRmlicmlsbGF0aW9uIG9yIEZsdXR0ZXIiICkKICAgICkKICAgIHVuaW9uICggIkVuY291bnRlciBXaXRoIElDVSBMb2NhdGlvbiIgUXVhbGlmeWluZ0VuY291bnRlcklDVQogICAgICAgIHdpdGggWyJDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zIjogIlZlbm91cyBUaHJvbWJvZW1ib2xpc20iXSBWVEVEaWFnbm9zaXMKICAgICAgICAgIHN1Y2ggdGhhdCAoIFZURURpYWdub3Npcy5jbGluaWNhbFN0YXR1cyB+IFN0YXR1cy4iaW5hY3RpdmUiCiAgICAgICAgICAgICAgb3IgVlRFRGlhZ25vc2lzLmNsaW5pY2FsU3RhdHVzIH4gU3RhdHVzLiJyZW1pc3Npb24iCiAgICAgICAgICAgICAgb3IgVlRFRGlhZ25vc2lzLmNsaW5pY2FsU3RhdHVzIH4gU3RhdHVzLiJyZXNvbHZlZCIKICAgICAgICAgICkKICAgICAgICAgICAgYW5kIFZURURpYWdub3Npcy52ZXJpZmljYXRpb25TdGF0dXMgaXMgbm90IG51bGwgaW1wbGllcyAoIFZURURpYWdub3Npcy52ZXJpZmljYXRpb25TdGF0dXMgIX4gU3RhdHVzLiJyZWZ1dGVkIgogICAgICAgICAgICAgIGFuZCBWVEVEaWFnbm9zaXMudmVyaWZpY2F0aW9uU3RhdHVzICF+IFN0YXR1cy4iZW50ZXJlZC1pbi1lcnJvciIKICAgICAgICAgICkKICAgICAgICAgICAgYW5kIFZURURpYWdub3Npcy5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIGJlZm9yZSBzdGFydCBvZiBRdWFsaWZ5aW5nRW5jb3VudGVySUNVLnBlcmlvZAogICAgKQoKZGVmaW5lICJFbmNvdW50ZXIgV2l0aCBQcmlvciBPciBQcmVzZW50IFByb2NlZHVyZSBPZiBIaXAgT3IgS25lZSBSZXBsYWNlbWVudCBTdXJnZXJ5IjoKICAiRW5jb3VudGVyIFdpdGggSUNVIExvY2F0aW9uIiBRdWFsaWZ5aW5nRW5jb3VudGVySUNVCiAgICB3aXRoICggWyJQcm9jZWR1cmUiOiAiSGlwIFJlcGxhY2VtZW50IFN1cmdlcnkiXQogICAgICB1bmlvbiBbIlByb2NlZHVyZSI6ICJLbmVlIFJlcGxhY2VtZW50IFN1cmdlcnkiXSApIEhpcEtuZWVQcm9jZWR1cmUKICAgICAgc3VjaCB0aGF0IEhpcEtuZWVQcm9jZWR1cmUuc3RhdHVzID0gJ2NvbXBsZXRlZCcKICAgICAgICBhbmQgSGlwS25lZVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgc3RhcnRzIG9uIG9yIGJlZm9yZSBlbmQgb2YgUXVhbGlmeWluZ0VuY291bnRlcklDVS5wZXJpb2QKCmRlZmluZSAiRW5jb3VudGVyIFdpdGggTG93IFJpc2sgRm9yIFZURSBPciBBbnRpY29hZ3VsYW50IEFkbWluaXN0ZXJlZCI6CiAgIkxvdyBSaXNrIEZvciBWVEUgT3IgQW50aWNvYWd1bGFudCBBZG1pbmlzdGVyZWQgRnJvbSBEYXkgT2YgU3RhcnQgT2YgSG9zcGl0YWxpemF0aW9uIFRvIERheSBBZnRlciBGaXJzdCBJQ1UgU3RheSIKICAgIHVuaW9uICJMb3cgUmlzayBGb3IgVlRFIE9yIEFudGljb2FndWxhbnQgQWRtaW5pc3RlcmVkIE9uIERheSBPZiBPciBEYXkgQWZ0ZXIgUHJvY2VkdXJlIgoKZGVmaW5lICJMb3cgUmlzayBJbmRpY2F0b3IgRm9yIFZURSI6CiAgKCBbIlNpbXBsZU9ic2VydmF0aW9uIjogIlJpc2sgZm9yIHZlbm91cyB0aHJvbWJvZW1ib2xpc20iXSBWVEVSaXNrQXNzZXNzbWVudAogICAgICB3aGVyZSBWVEVSaXNrQXNzZXNzbWVudC52YWx1ZSBhcyBDb2RlYWJsZUNvbmNlcHQgaW4gIkxvdyBSaXNrIgogICAgICAgIGFuZCBWVEVSaXNrQXNzZXNzbWVudC5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBpZDogVlRFUmlza0Fzc2Vzc21lbnQuaWQsCiAgICAgICAgTG93Umlza0RhdGV0aW1lOiBWVEVSaXNrQXNzZXNzbWVudC5lZmZlY3RpdmUuZWFybGllc3QgKCApCiAgICAgIH0KICApCiAgICB1bmlvbiAoIFsiTGFib3JhdG9yeVJlc3VsdE9ic2VydmF0aW9uIjogIklOUiJdIElOUkxhYlRlc3QKICAgICAgICB3aGVyZSBJTlJMYWJUZXN0LnZhbHVlIGFzIFF1YW50aXR5ID4gMy4wCiAgICAgICAgICBhbmQgSU5STGFiVGVzdC5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAgaWQ6IElOUkxhYlRlc3QuaWQsCiAgICAgICAgICBMb3dSaXNrRGF0ZXRpbWU6IElOUkxhYlRlc3QuaXNzdWVkCiAgICAgICAgfQogICAgKQogICAgdW5pb24gKCAoICggWyJNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb24iOiAiVW5mcmFjdGlvbmF0ZWQgSGVwYXJpbiJdIFVuZnJhY3Rpb25hdGVkSGVwYXJpbgogICAgICAgICAgd2hlcmUgVW5mcmFjdGlvbmF0ZWRIZXBhcmluLmRvc2FnZS5yb3V0ZSBpbiAiSW50cmF2ZW5vdXMgcm91dGUiCiAgICAgICkKICAgICAgICB1bmlvbiBbIk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbiI6ICJEaXJlY3QgVGhyb21iaW4gSW5oaWJpdG9yIl0KICAgICAgICB1bmlvbiBbIk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbiI6ICJHbHljb3Byb3RlaW4gSUliIElJSWEgSW5oaWJpdG9ycyJdICkgQW50aWNvYWd1bGFudE1lZGljYXRpb24KICAgICAgICB3aGVyZSBBbnRpY29hZ3VsYW50TWVkaWNhdGlvbi5zdGF0dXMgPSAnY29tcGxldGVkJwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBpZDogQW50aWNvYWd1bGFudE1lZGljYXRpb24uaWQsCiAgICAgICAgICBMb3dSaXNrRGF0ZXRpbWU6IHN0YXJ0IG9mIEFudGljb2FndWxhbnRNZWRpY2F0aW9uLmVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICAgICAgIH0KICAgICkKCmRlZmluZSAiTG93IFJpc2sgRm9yIFZURSBPciBBbnRpY29hZ3VsYW50IEFkbWluaXN0ZXJlZCBGcm9tIERheSBPZiBTdGFydCBPZiBIb3NwaXRhbGl6YXRpb24gVG8gRGF5IEFmdGVyIEZpcnN0IElDVSBTdGF5IjoKICAiRW5jb3VudGVyIFdpdGggSUNVIExvY2F0aW9uIiBRdWFsaWZ5aW5nRW5jb3VudGVySUNVCiAgICB3aXRoICJMb3cgUmlzayBJbmRpY2F0b3IgRm9yIFZURSIgTG93Umlza0ZvclZURQogICAgICBzdWNoIHRoYXQgTG93Umlza0ZvclZURS5Mb3dSaXNrRGF0ZXRpbWUgZHVyaW5nIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVySUNVLmZyb21EYXlPZlN0YXJ0T2ZIb3NwaXRhbGl6YXRpb25Ub0RheUFmdGVyRmlyc3RJQ1UgKCApCgpkZWZpbmUgIkxvdyBSaXNrIEZvciBWVEUgT3IgQW50aWNvYWd1bGFudCBBZG1pbmlzdGVyZWQgT24gRGF5IE9mIE9yIERheSBBZnRlciBQcm9jZWR1cmUiOgogIGZyb20KICAgICJFbmNvdW50ZXIgV2l0aCBJQ1UgTG9jYXRpb24iIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UsCiAgICBbIlByb2NlZHVyZSI6ICJHZW5lcmFsIG9yIE5ldXJheGlhbCBBbmVzdGhlc2lhIl0gQW5lc3RoZXNpYVByb2NlZHVyZSwKICAgICJMb3cgUmlzayBJbmRpY2F0b3IgRm9yIFZURSIgTG93Umlza0ZvclZURQogICAgd2hlcmUgQW5lc3RoZXNpYVByb2NlZHVyZS5zdGF0dXMgPSAnY29tcGxldGVkJwogICAgICBhbmQgQW5lc3RoZXNpYVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgZW5kcyAxIGRheSBhZnRlciBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlcklDVS5zdGFydE9mRmlyc3RJQ1UgKCApCiAgICAgIGFuZCBMb3dSaXNrRm9yVlRFLkxvd1Jpc2tEYXRldGltZSBkdXJpbmcgZGF5IG9mICggZW5kIG9mIEFuZXN0aGVzaWFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkuY2FsZW5kYXJEYXlPZk9yRGF5QWZ0ZXIgKCApCiAgICByZXR1cm4gUXVhbGlmeWluZ0VuY291bnRlcklDVQoKZGVmaW5lICJFbmNvdW50ZXIgV2l0aCBObyBWVEUgUHJvcGh5bGF4aXMgRHVlIFRvIE1lZGljYWwgUmVhc29uIjoKICAoICJObyBWVEUgUHJvcGh5bGF4aXMgTWVkaWNhdGlvbiBEdWUgVG8gTWVkaWNhbCBSZWFzb24gRnJvbSBEYXkgT2YgU3RhcnQgT2YgSG9zcGl0YWxpemF0aW9uIFRvIERheSBBZnRlciBGaXJzdCBJQ1UgU3RheSIKICAgICAgaW50ZXJzZWN0ICJObyBNZWNoYW5pY2FsIFZURSBQcm9waHlsYXhpcyBEdWUgVG8gTWVkaWNhbCBSZWFzb24gRnJvbSBEYXkgT2YgU3RhcnQgT2YgSG9zcGl0YWxpemF0aW9uIFRvIERheSBBZnRlciBGaXJzdCBJQ1UgU3RheSIKICApCiAgICB1bmlvbiAoICJObyBWVEUgUHJvcGh5bGF4aXMgTWVkaWNhdGlvbiBEdWUgVG8gTWVkaWNhbCBSZWFzb24gT24gRGF5IE9mIE9yIERheSBBZnRlciBQcm9jZWR1cmUiCiAgICAgICAgaW50ZXJzZWN0ICJObyBNZWNoYW5pY2FsIFZURSBQcm9waHlsYXhpcyBEdWUgVG8gTWVkaWNhbCBSZWFzb24gT24gRGF5IE9mIE9yIERheSBBZnRlciBQcm9jZWR1cmUiCiAgICApCgpkZWZpbmUgIk5vIFZURSBQcm9waHlsYXhpcyBNZWRpY2F0aW9uIER1ZSBUbyBNZWRpY2FsIFJlYXNvbiBGcm9tIERheSBPZiBTdGFydCBPZiBIb3NwaXRhbGl6YXRpb24gVG8gRGF5IEFmdGVyIEZpcnN0IElDVSBTdGF5IjoKICAiRW5jb3VudGVyIFdpdGggSUNVIExvY2F0aW9uIiBRdWFsaWZ5aW5nRW5jb3VudGVySUNVCiAgICB3aXRoICJObyBWVEUgUHJvcGh5bGF4aXMgTWVkaWNhdGlvbiBBZG1pbmlzdGVyZWQgT3IgT3JkZXJlZCIgTm9WVEVNZWRpY2F0aW9uCiAgICAgIHN1Y2ggdGhhdCBOb1ZURU1lZGljYXRpb24ubWVkaWNhdGlvblN0YXR1c1JlYXNvbiBpbiAiTWVkaWNhbCBSZWFzb24gRm9yIE5vdCBQcm92aWRpbmcgVHJlYXRtZW50IgogICAgICAgIGFuZCBOb1ZURU1lZGljYXRpb24uYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UuZnJvbURheU9mU3RhcnRPZkhvc3BpdGFsaXphdGlvblRvRGF5QWZ0ZXJGaXJzdElDVSAoICkKCmRlZmluZSAiTm8gVlRFIFByb3BoeWxheGlzIE1lZGljYXRpb24gQWRtaW5pc3RlcmVkIE9yIE9yZGVyZWQiOgogICggKCBbTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uTm90RG9uZTogIkxvdyBEb3NlIFVuZnJhY3Rpb25hdGVkIEhlcGFyaW4gZm9yIFZURSBQcm9waHlsYXhpcyJdCiAgICAgIHVuaW9uIFtNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25Ob3REb25lOiAiTG93IE1vbGVjdWxhciBXZWlnaHQgSGVwYXJpbiBmb3IgVlRFIFByb3BoeWxheGlzIl0KICAgICAgdW5pb24gW01lZGljYXRpb25BZG1pbmlzdHJhdGlvbk5vdERvbmU6ICJJbmplY3RhYmxlIEZhY3RvciBYYSBJbmhpYml0b3IgZm9yIFZURSBQcm9waHlsYXhpcyJdCiAgICAgIHVuaW9uIFtNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25Ob3REb25lOiAiV2FyZmFyaW4iXQogICAgICB1bmlvbiBbTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uTm90RG9uZTogIlJpdmFyb3hhYmFuIGZvciBWVEUgUHJvcGh5bGF4aXMiXSApIE5vTWVkaWNhdGlvbkFkbQogICAgICByZXR1cm4gewogICAgICAgIGlkOiBOb01lZGljYXRpb25BZG0uaWQsCiAgICAgICAgbWVkaWNhdGlvblN0YXR1c1JlYXNvbjogTm9NZWRpY2F0aW9uQWRtLnN0YXR1c1JlYXNvbiwKICAgICAgICBhdXRob3JlZE9uOiBOb01lZGljYXRpb25BZG0uZWZmZWN0aXZlCiAgICAgIH0KICApCiAgICB1bmlvbiAoICggWyJNZWRpY2F0aW9uTm90UmVxdWVzdGVkIjogIkxvdyBEb3NlIFVuZnJhY3Rpb25hdGVkIEhlcGFyaW4gZm9yIFZURSBQcm9waHlsYXhpcyJdCiAgICAgICAgdW5pb24gWyJNZWRpY2F0aW9uTm90UmVxdWVzdGVkIjogIkxvdyBNb2xlY3VsYXIgV2VpZ2h0IEhlcGFyaW4gZm9yIFZURSBQcm9waHlsYXhpcyJdCiAgICAgICAgdW5pb24gWyJNZWRpY2F0aW9uTm90UmVxdWVzdGVkIjogIkluamVjdGFibGUgRmFjdG9yIFhhIEluaGliaXRvciBmb3IgVlRFIFByb3BoeWxheGlzIl0KICAgICAgICB1bmlvbiBbIk1lZGljYXRpb25Ob3RSZXF1ZXN0ZWQiOiAiV2FyZmFyaW4iXQogICAgICAgIHVuaW9uIFsiTWVkaWNhdGlvbk5vdFJlcXVlc3RlZCI6ICJSaXZhcm94YWJhbiBmb3IgVlRFIFByb3BoeWxheGlzIl0gKSBOb01lZGljYXRpb25PcmRlcgogICAgICAgIHdoZXJlIE5vTWVkaWNhdGlvbk9yZGVyLmludGVudCBpbiB7ICdvcmRlcicsICdvcmlnaW5hbC1vcmRlcicsICdyZWZsZXgtb3JkZXInLCAnZmlsbGVyLW9yZGVyJywgJ2luc3RhbmNlLW9yZGVyJyB9CiAgICAgICAgICBhbmQgTm9NZWRpY2F0aW9uT3JkZXIuc3RhdHVzIGluIHsgJ2FjdGl2ZScsICdjb21wbGV0ZWQnIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAgaWQ6IE5vTWVkaWNhdGlvbk9yZGVyLmlkLAogICAgICAgICAgbWVkaWNhdGlvblN0YXR1c1JlYXNvbjogTm9NZWRpY2F0aW9uT3JkZXIucmVhc29uQ29kZSwKICAgICAgICAgIGF1dGhvcmVkT246IE5vTWVkaWNhdGlvbk9yZGVyLmF1dGhvcmVkT24KICAgICAgICB9CiAgICApCiAgICB1bmlvbiAoIGZyb20KICAgICAgICAoIFsiTWVkaWNhdGlvblJlcXVlc3QiOiAiTG93IERvc2UgVW5mcmFjdGlvbmF0ZWQgSGVwYXJpbiBmb3IgVlRFIFByb3BoeWxheGlzIl0KICAgICAgICAgIHVuaW9uIFsiTWVkaWNhdGlvblJlcXVlc3QiOiAiTG93IE1vbGVjdWxhciBXZWlnaHQgSGVwYXJpbiBmb3IgVlRFIFByb3BoeWxheGlzIl0KICAgICAgICAgIHVuaW9uIFsiTWVkaWNhdGlvblJlcXVlc3QiOiAiSW5qZWN0YWJsZSBGYWN0b3IgWGEgSW5oaWJpdG9yIGZvciBWVEUgUHJvcGh5bGF4aXMiXQogICAgICAgICAgdW5pb24gWyJNZWRpY2F0aW9uUmVxdWVzdCI6ICJXYXJmYXJpbiJdCiAgICAgICAgICB1bmlvbiBbIk1lZGljYXRpb25SZXF1ZXN0IjogIlJpdmFyb3hhYmFuIGZvciBWVEUgUHJvcGh5bGF4aXMiXSApIE1lZGljYXRpb25PcmRlclJlamVjdCwKICAgICAgICBbVGFza1JlamVjdGVkXSBUCiAgICAgICAgd2hlcmUgVC5mb2N1cy5yZWZlcmVuY2VzICggTWVkaWNhdGlvbk9yZGVyUmVqZWN0ICkKICAgICAgICAgIGFuZCBULmNvZGUgfiBVU1F1YWxpdHlDb3JlQ29tbW9uLiJGdWxmaWxsIgogICAgICAgICAgYW5kIE1lZGljYXRpb25PcmRlclJlamVjdC5zdGF0dXMgPSAnYWN0aXZlJwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBpZDogTWVkaWNhdGlvbk9yZGVyUmVqZWN0LmlkLAogICAgICAgICAgbWVkaWNhdGlvblN0YXR1c1JlYXNvbjogeyBULnN0YXR1c1JlYXNvbiB9LAogICAgICAgICAgYXV0aG9yZWRPbjogTWVkaWNhdGlvbk9yZGVyUmVqZWN0LmF1dGhvcmVkT24KICAgICAgICB9CiAgICApCgpkZWZpbmUgIk5vIE1lY2hhbmljYWwgVlRFIFByb3BoeWxheGlzIER1ZSBUbyBNZWRpY2FsIFJlYXNvbiBGcm9tIERheSBPZiBTdGFydCBPZiBIb3NwaXRhbGl6YXRpb24gVG8gRGF5IEFmdGVyIEZpcnN0IElDVSBTdGF5IjoKICAiRW5jb3VudGVyIFdpdGggSUNVIExvY2F0aW9uIiBRdWFsaWZ5aW5nRW5jb3VudGVySUNVCiAgICB3aXRoICJObyBNZWNoYW5pY2FsIFZURSBQcm9waHlsYXhpcyBQZXJmb3JtZWQgT3IgT3JkZXJlZCIgTm9WVEVEZXZpY2UKICAgICAgc3VjaCB0aGF0IE5vVlRFRGV2aWNlLnJlcXVlc3RTdGF0dXNSZWFzb24gaW4gIk1lZGljYWwgUmVhc29uIEZvciBOb3QgUHJvdmlkaW5nIFRyZWF0bWVudCIKICAgICAgICBhbmQgTm9WVEVEZXZpY2UuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UuZnJvbURheU9mU3RhcnRPZkhvc3BpdGFsaXphdGlvblRvRGF5QWZ0ZXJGaXJzdElDVSAoICkKCmRlZmluZSAiTm8gTWVjaGFuaWNhbCBWVEUgUHJvcGh5bGF4aXMgUGVyZm9ybWVkIE9yIE9yZGVyZWQiOgogICggKCBbU2VydmljZU5vdFJlcXVlc3RlZDogIlZlbm91cyBmb290IHB1bXBzIl0KICAgICAgdW5pb24gW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJJbnRlcm1pdHRlbnQgcG5ldW1hdGljIGNvbXByZXNzaW9uIGRldmljZXMiXQogICAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIkdyYWR1YXRlZCBjb21wcmVzc2lvbiBzdG9ja2luZ3MiXSApIERldmljZU5vdE9yZGVyCiAgICAgIHdoZXJlIERldmljZU5vdE9yZGVyLmludGVudCBpbiB7ICdvcmRlcicsICdvcmlnaW5hbC1vcmRlcicsICdyZWZsZXgtb3JkZXInLCAnZmlsbGVyLW9yZGVyJywgJ2luc3RhbmNlLW9yZGVyJyB9CiAgICAgIHJldHVybiB7CiAgICAgICAgaWQ6IERldmljZU5vdE9yZGVyLmlkLAogICAgICAgIHJlcXVlc3RTdGF0dXNSZWFzb246IERldmljZU5vdE9yZGVyLnJlYXNvblJlZnVzZWQgKCApLAogICAgICAgIGF1dGhvcmVkT246IERldmljZU5vdE9yZGVyLmF1dGhvcmVkT24KICAgICAgfQogICkKICAgIHVuaW9uICggZnJvbQogICAgICAgICggW1NlcnZpY2VSZXF1ZXN0OiAiVmVub3VzIGZvb3QgcHVtcHMiXQogICAgICAgICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiSW50ZXJtaXR0ZW50IHBuZXVtYXRpYyBjb21wcmVzc2lvbiBkZXZpY2VzIl0KICAgICAgICAgIHVuaW9uIFtTZXJ2aWNlUmVxdWVzdDogIkdyYWR1YXRlZCBjb21wcmVzc2lvbiBzdG9ja2luZ3MiXSApIERldmljZU9yZGVyUmVqZWN0LAogICAgICAgIFtUYXNrUmVqZWN0ZWRdIFQKICAgICAgICB3aGVyZSBEZXZpY2VPcmRlclJlamVjdC5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQogICAgICAgICAgYW5kIERldmljZU9yZGVyUmVqZWN0LnN0YXR1cyA9ICdhY3RpdmUnCiAgICAgICAgICBhbmQgVC5mb2N1cy5yZWZlcmVuY2VzICggRGV2aWNlT3JkZXJSZWplY3QgKQogICAgICAgICAgYW5kIFQuY29kZSB+IFVTUXVhbGl0eUNvcmVDb21tb24uIkZ1bGZpbGwiCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGlkOiBEZXZpY2VPcmRlclJlamVjdC5pZCwKICAgICAgICAgIHJlcXVlc3RTdGF0dXNSZWFzb246IFQuc3RhdHVzUmVhc29uLAogICAgICAgICAgYXV0aG9yZWRPbjogRGV2aWNlT3JkZXJSZWplY3QuYXV0aG9yZWRPbgogICAgICAgIH0KICAgICkKICAgIHVuaW9uICggKCBbUHJvY2VkdXJlTm90RG9uZTogIkFwcGxpY2F0aW9uIG9mIEludGVybWl0dGVudCBQbmV1bWF0aWMgQ29tcHJlc3Npb24gRGV2aWNlcyJdCiAgICAgICAgdW5pb24gW1Byb2NlZHVyZU5vdERvbmU6ICJBcHBsaWNhdGlvbiBvZiBWZW5vdXMgRm9vdCBQdW1wcyJdCiAgICAgICAgdW5pb24gW1Byb2NlZHVyZU5vdERvbmU6ICJBcHBsaWNhdGlvbiBvZiBHcmFkdWF0ZWQgQ29tcHJlc3Npb24gU3RvY2tpbmdzIl0gKSBEZXZpY2VOb3RBcHBsaWVkCiAgICAgICAgbGV0IERldmljZU5vdERvbmVUaW1pbmc6IERldmljZU5vdEFwcGxpZWQucGVyZm9ybWVkCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGlkOiBEZXZpY2VOb3RBcHBsaWVkLmlkLAogICAgICAgICAgcmVxdWVzdFN0YXR1c1JlYXNvbjogRGV2aWNlTm90QXBwbGllZC5zdGF0dXNSZWFzb24sCiAgICAgICAgICBhdXRob3JlZE9uOiBEZXZpY2VOb3REb25lVGltaW5nCiAgICAgICAgfQogICAgKQoKZGVmaW5lICJObyBWVEUgUHJvcGh5bGF4aXMgTWVkaWNhdGlvbiBEdWUgVG8gTWVkaWNhbCBSZWFzb24gT24gRGF5IE9mIE9yIERheSBBZnRlciBQcm9jZWR1cmUiOgogIGZyb20KICAgICJFbmNvdW50ZXIgV2l0aCBJQ1UgTG9jYXRpb24iIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UsCiAgICBbIlByb2NlZHVyZSI6ICJHZW5lcmFsIG9yIE5ldXJheGlhbCBBbmVzdGhlc2lhIl0gQW5lc3RoZXNpYVByb2NlZHVyZSwKICAgICJObyBWVEUgUHJvcGh5bGF4aXMgTWVkaWNhdGlvbiBBZG1pbmlzdGVyZWQgT3IgT3JkZXJlZCIgTm9WVEVNZWRpY2F0aW9uCiAgICB3aGVyZSBOb1ZURU1lZGljYXRpb24ubWVkaWNhdGlvblN0YXR1c1JlYXNvbiBpbiAiTWVkaWNhbCBSZWFzb24gRm9yIE5vdCBQcm92aWRpbmcgVHJlYXRtZW50IgogICAgICBhbmQgQW5lc3RoZXNpYVByb2NlZHVyZS5zdGF0dXMgPSAnY29tcGxldGVkJwogICAgICBhbmQgQW5lc3RoZXNpYVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgZW5kcyAxIGRheSBhZnRlciBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlcklDVS5zdGFydE9mRmlyc3RJQ1UgKCApCiAgICAgIGFuZCBOb1ZURU1lZGljYXRpb24uYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mICggZW5kIG9mIEFuZXN0aGVzaWFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkuY2FsZW5kYXJEYXlPZk9yRGF5QWZ0ZXIgKCApCiAgICByZXR1cm4gUXVhbGlmeWluZ0VuY291bnRlcklDVQoKZGVmaW5lICJObyBNZWNoYW5pY2FsIFZURSBQcm9waHlsYXhpcyBEdWUgVG8gTWVkaWNhbCBSZWFzb24gT24gRGF5IE9mIE9yIERheSBBZnRlciBQcm9jZWR1cmUiOgogIGZyb20KICAgICJFbmNvdW50ZXIgV2l0aCBJQ1UgTG9jYXRpb24iIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UsCiAgICBbIlByb2NlZHVyZSI6ICJHZW5lcmFsIG9yIE5ldXJheGlhbCBBbmVzdGhlc2lhIl0gQW5lc3RoZXNpYVByb2NlZHVyZSwKICAgICJObyBNZWNoYW5pY2FsIFZURSBQcm9waHlsYXhpcyBQZXJmb3JtZWQgT3IgT3JkZXJlZCIgTm9WVEVEZXZpY2UKICAgIHdoZXJlIE5vVlRFRGV2aWNlLnJlcXVlc3RTdGF0dXNSZWFzb24gaW4gIk1lZGljYWwgUmVhc29uIEZvciBOb3QgUHJvdmlkaW5nIFRyZWF0bWVudCIKICAgICAgYW5kIEFuZXN0aGVzaWFQcm9jZWR1cmUuc3RhdHVzID0gJ2NvbXBsZXRlZCcKICAgICAgYW5kIEFuZXN0aGVzaWFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIGVuZHMgMSBkYXkgYWZ0ZXIgZGF5IG9mIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1Uuc3RhcnRPZkZpcnN0SUNVICggKQogICAgICBhbmQgTm9WVEVEZXZpY2UuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mICggZW5kIG9mIEFuZXN0aGVzaWFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkuY2FsZW5kYXJEYXlPZk9yRGF5QWZ0ZXIgKCApCiAgICByZXR1cm4gUXVhbGlmeWluZ0VuY291bnRlcklDVQoKZGVmaW5lICJFbmNvdW50ZXIgV2l0aCBObyBWVEUgUHJvcGh5bGF4aXMgRHVlIFRvIFBhdGllbnQgUmVmdXNhbCI6CiAgIk5vIFZURSBQcm9waHlsYXhpcyBEdWUgVG8gUGF0aWVudCBSZWZ1c2FsIEZyb20gRGF5IE9mIFN0YXJ0IE9mIEhvc3BpdGFsaXphdGlvbiBUbyBEYXkgQWZ0ZXIgRmlyc3QgSUNVIFN0YXkiCiAgICB1bmlvbiAiTm8gVlRFIFByb3BoeWxheGlzIER1ZSBUbyBQYXRpZW50IFJlZnVzYWwgT24gRGF5IE9mIE9yIERheSBBZnRlciBQcm9jZWR1cmUiCgpkZWZpbmUgIk5vIFZURSBQcm9waHlsYXhpcyBEdWUgVG8gUGF0aWVudCBSZWZ1c2FsIEZyb20gRGF5IE9mIFN0YXJ0IE9mIEhvc3BpdGFsaXphdGlvbiBUbyBEYXkgQWZ0ZXIgRmlyc3QgSUNVIFN0YXkiOgogICJFbmNvdW50ZXIgV2l0aCBJQ1UgTG9jYXRpb24iIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UKICAgIHdpdGggIk5vIE1lY2hhbmljYWwgb3IgUGhhcm1hY29sb2dpY2FsIFZURSBQcm9waHlsYXhpcyBEdWUgVG8gUGF0aWVudCBSZWZ1c2FsIiBQYXRpZW50UmVmdXNhbAogICAgICBzdWNoIHRoYXQgUGF0aWVudFJlZnVzYWwuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UuZnJvbURheU9mU3RhcnRPZkhvc3BpdGFsaXphdGlvblRvRGF5QWZ0ZXJGaXJzdElDVSAoICkKCmRlZmluZSAiTm8gVlRFIFByb3BoeWxheGlzIER1ZSBUbyBQYXRpZW50IFJlZnVzYWwgT24gRGF5IE9mIE9yIERheSBBZnRlciBQcm9jZWR1cmUiOgogIGZyb20KICAgICJFbmNvdW50ZXIgV2l0aCBJQ1UgTG9jYXRpb24iIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1UsCiAgICBbIlByb2NlZHVyZSI6ICJHZW5lcmFsIG9yIE5ldXJheGlhbCBBbmVzdGhlc2lhIl0gQW5lc3RoZXNpYVByb2NlZHVyZSwKICAgICJObyBNZWNoYW5pY2FsIG9yIFBoYXJtYWNvbG9naWNhbCBWVEUgUHJvcGh5bGF4aXMgRHVlIFRvIFBhdGllbnQgUmVmdXNhbCIgUGF0aWVudFJlZnVzYWwKICAgIHdoZXJlIEFuZXN0aGVzaWFQcm9jZWR1cmUuc3RhdHVzID0gJ2NvbXBsZXRlZCcKICAgICAgYW5kIEFuZXN0aGVzaWFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIGVuZHMgMSBkYXkgYWZ0ZXIgZGF5IG9mIFF1YWxpZnlpbmdFbmNvdW50ZXJJQ1Uuc3RhcnRPZkZpcnN0SUNVICggKQogICAgICBhbmQgUGF0aWVudFJlZnVzYWwuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mICggZW5kIG9mIEFuZXN0aGVzaWFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkuY2FsZW5kYXJEYXlPZk9yRGF5QWZ0ZXIgKCApCiAgICByZXR1cm4gUXVhbGlmeWluZ0VuY291bnRlcklDVQoKZGVmaW5lICJObyBNZWNoYW5pY2FsIG9yIFBoYXJtYWNvbG9naWNhbCBWVEUgUHJvcGh5bGF4aXMgRHVlIFRvIFBhdGllbnQgUmVmdXNhbCI6CiAgKCAiTm8gVlRFIFByb3BoeWxheGlzIE1lZGljYXRpb24gQWRtaW5pc3RlcmVkIE9yIE9yZGVyZWQiIE5vVlRFTWVkaWNhdGlvbgogICAgICB3aGVyZSBOb1ZURU1lZGljYXRpb24ubWVkaWNhdGlvblN0YXR1c1JlYXNvbiBpbiAiUGF0aWVudCBSZWZ1c2FsIgogICkKICAgIHVuaW9uICggIk5vIE1lY2hhbmljYWwgVlRFIFByb3BoeWxheGlzIFBlcmZvcm1lZCBPciBPcmRlcmVkIiBOb1ZURURldmljZQogICAgICAgIHdoZXJlIE5vVlRFRGV2aWNlLnJlcXVlc3RTdGF0dXNSZWFzb24gaW4gIlBhdGllbnQgUmVmdXNhbCIKICAgICkKCmRlZmluZSAiRGVub21pbmF0b3IgRXhjZXB0aW9ucyI6CiAgIkVuY291bnRlciBXaXRoIEZpcnN0IElDVSBMb2NhdGlvbiBTdGF5IExlc3MgVGhhbiAxIERheSIKCmRlZmluZSAiRW5jb3VudGVyIFdpdGggRmlyc3QgSUNVIExvY2F0aW9uIFN0YXkgTGVzcyBUaGFuIDEgRGF5IjoKICAiRW5jb3VudGVyIFdpdGggSUNVIExvY2F0aW9uIiBRdWFsaWZ5aW5nRW5jb3VudGVySUNVCiAgICB3aGVyZSBRdWFsaWZ5aW5nRW5jb3VudGVySUNVLmZpcnN0SW5wYXRpZW50SW50ZW5zaXZlQ2FyZVVuaXQgKCApLnBlcmlvZC5sZW5ndGhJbkRheXMgKCApIDwgMQoKZGVmaW5lIGZsdWVudCBmdW5jdGlvbiAic3RhcnRPZkZpcnN0SUNVIihFbmNvdW50ZXIgRW5jb3VudGVyKToKICBzdGFydCBvZiBFbmNvdW50ZXIuZmlyc3RJbnBhdGllbnRJbnRlbnNpdmVDYXJlVW5pdCAoICkucGVyaW9kCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uICJmcm9tRGF5T2ZTdGFydE9mSG9zcGl0YWxpemF0aW9uVG9EYXlBZnRlckZpcnN0SUNVIihFbmNvdW50ZXIgRW5jb3VudGVyKToKICBJbnRlcnZhbFtkYXRlIGZyb20gKCBzdGFydCBvZiBFbmNvdW50ZXIuaG9zcGl0YWxpemF0aW9uV2l0aE9ic2VydmF0aW9uICggKSApLCBkYXRlIGZyb20gKCBFbmNvdW50ZXIuc3RhcnRPZkZpcnN0SUNVICggKSApICsgMSBkYXld",
      "url" : "https://madie.cms.gov/Library-CMS190FHIRVTEProphylaxisICU.cql"
    }
  ]
}