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

: CMS22FHIRPCSBPScreeningFollowUp - XML Representation

Draft as of 2026-09-19

Raw xml | Download


<Library xmlns="http://hl7.org/fhir">
  <id value="CMS22FHIRPCSBPScreeningFollowUp"/>
  <text>
    <status value="extensions"/>
    <div xmlns="http://www.w3.org/1999/xhtml">
  <table class="narrative-table">
    <tbody>
<tr>


<th colspan="2" scope="row" class="row-header"><a name="metadata"> </a>Metadata</th>


</tr>







<tr>


<th scope="row" class="row-header">Version</th>



<td class="content-container">1.1.000</td>


</tr>
















<tr>


<th scope="row" class="row-header">Status</th>



<td class="content-container">Draft</td>


</tr>







































<tr>


<th scope="row" class="row-header">Type</th>



<td class="content-container">
    <a href="http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html">http://terminology.hl7.org/CodeSystem/library-type</a>#logic-library


</td>


</tr>













<tr>


<th colspan="2" scope="row" class="row-header"><a name="parameters"> </a>Parameters</th>


</tr>


<tr>


<th scope="row" class="row-header">Parameter</th>



<td class="content-container">None</td>


</tr>








  <tr>


<th colspan="2" scope="row" class="row-header">Library Content</th>


</tr>
  
    
    <tr>
      <th scope="row" class="row-header">CQL Content</th>
      <td>
        <a name="cql-content"> </a>
        <pre style="border: none;" class="content-container highlight language-cql"><code class="language-cql">/*
NOTE: For use by March 2026 US Realm Connectathon participants for internal use only. Not for use or distribution in commercial products.
*/
library CMS22FHIRPCSBPScreeningFollowUp version '1.1.000'

using USQualityCore version '0.1.0-cibuild'
using USCore version '6.1.0-derived'
using FHIR version '4.0.1'

include hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers
include hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon
include hl7.fhir.us.cql.CumulativeMedicationDuration version '2.0.0-ballot' called CMD
include hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon
include hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements

include USQualityCoreCommon version '0.1.0-cibuild' called USQualityCoreCommon
include SupplementalDataElements version '6.1.000' called SDE
include Status version '2.1.000' called Status

codesystem &quot;ActCode&quot;: 'http://terminology.hl7.org/CodeSystem/v3-ActCode'
codesystem &quot;LOINC&quot;: 'http://loinc.org'
codesystem &quot;SNOMEDCT&quot;: 'http://snomed.info/sct'

valueset &quot;Diagnosis of Hypertension&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.263'
valueset &quot;Dietary Recommendations&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1515'
valueset &quot;Encounter to Screen for Blood Pressure&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1920'
valueset &quot;Finding of Elevated Blood Pressure or Hypertension&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1047.514'
valueset &quot;Follow Up Within 4 Weeks&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1578'
valueset &quot;Follow Up Within 6 Months&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1108.125'
valueset &quot;Laboratory Tests for Hypertension&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1482'
valueset &quot;Lifestyle Recommendation&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1581'
valueset &quot;Medical Reason&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1007'
valueset &quot;Patient Declined&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1582'
valueset &quot;Pharmacologic Therapy for Hypertension&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.1577'
valueset &quot;Recommendation to Increase Physical Activity&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1518'
valueset &quot;Referral or Counseling for Alcohol Consumption&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1583'
valueset &quot;Referral to Primary Care or Alternate Provider&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1580'
valueset &quot;Weight Reduction Recommended&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1510'

code &quot;Blood pressure panel with all children optional&quot;: '85354-9' from &quot;LOINC&quot; display 'Blood pressure panel with all children optional'
code &quot;Diastolic blood pressure&quot;: '8462-4' from &quot;LOINC&quot; display 'Diastolic blood pressure'
code &quot;12 lead EKG panel&quot;: '34534-8' from &quot;LOINC&quot; display 'EKG 12 channel panel'
code &quot;EKG study&quot;: '11524-6' from &quot;LOINC&quot; display 'EKG study'
code &quot;Systolic blood pressure&quot;: '8480-6' from &quot;LOINC&quot; display 'Systolic blood pressure'
code &quot;virtual&quot;: 'VR' from &quot;ActCode&quot; display 'virtual'

parameter &quot;Measurement Period&quot; Interval&lt;DateTime&gt;
  default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)

context Patient

define &quot;Initial Population&quot;:
  &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter
    where AgeInYearsAt(date from start of &quot;Measurement Period&quot;) &gt;= 18

define &quot;Denominator&quot;:
  &quot;Initial Population&quot;

define &quot;Denominator Exclusions&quot;:
  &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter
    with [ConditionProblemsHealthConcerns: &quot;Diagnosis of Hypertension&quot;] Hypertension
      such that Hypertension.prevalenceInterval ( ) starts before or on day of QualifyingEncounter.period
        and Hypertension.isVerified ( )

define &quot;Numerator&quot;:
  &quot;Encounter with Normal Blood Pressure Reading&quot;
    union ( &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80 and Interventions&quot; )
    union ( &quot;Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80 and Interventions&quot; )
    union ( &quot;Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 and Interventions&quot; )
    union ( &quot;Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 and Interventions&quot; )

define &quot;Denominator Exceptions&quot;:
  &quot;Encounter with Medical Reason for Not Obtaining or Patient Declined Blood Pressure Measurement&quot;
    union &quot;Encounter with Order for Hypertension Follow Up Declined by Patient&quot;

define &quot;Follow up with Rescreen Within 6 Months&quot;:
  [ServiceRequest: &quot;Follow Up Within 6 Months&quot;] FollowUp
    where FollowUp.intent ~ 'order'

define &quot;Laboratory Test or ECG for Hypertension&quot;:
  ( [ServiceRequest: &quot;12 lead EKG panel&quot;]
    union [ServiceRequest: &quot;EKG study&quot;]
    union [ServiceRequest: &quot;Laboratory Tests for Hypertension&quot;] ) EKGLab
    where EKGLab.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }

define &quot;NonPharmacological Interventions&quot;:
  ( [ServiceRequest: &quot;Lifestyle Recommendation&quot;]
    union [ServiceRequest: &quot;Weight Reduction Recommended&quot;]
    union [ServiceRequest: &quot;Dietary Recommendations&quot;]
    union [ServiceRequest: &quot;Recommendation to Increase Physical Activity&quot;]
    union [ServiceRequest: &quot;Referral or Counseling for Alcohol Consumption&quot;] ) NonPharmaInterventions
    where NonPharmaInterventions.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }

define &quot;Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80 and Interventions&quot;:
  &quot;Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80&quot; FirstHTNEncounter
    with &quot;First Hypertensive Reading Interventions or Referral to Alternate Professional&quot; FirstHTNIntervention
      such that FirstHTNIntervention.authoredOn during day of FirstHTNEncounter.period

define &quot;Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 and Interventions&quot;:
  ( &quot;Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89&quot; SecondHTNEncounterReading
      with &quot;Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 and Interventions&quot; EncounterInterventions
        such that EncounterInterventions.authoredOn during day of SecondHTNEncounterReading.period
  )
    union ( &quot;Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89&quot; SecondHTNEncounterReading
        with &quot;Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading&quot; ReferralForHTN
          such that ReferralForHTN.authoredOn during day of SecondHTNEncounterReading.period
    )

define &quot;Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 and Interventions&quot;:
  ( &quot;Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90&quot; SecondHTNEncounterReading140Over90
      with &quot;Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 Interventions&quot; SecondHTN140Over90Interventions
        such that SecondHTN140Over90Interventions.authoredOn during day of SecondHTNEncounterReading140Over90.period
  )
    union &quot;Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90&quot; SecondHTNEncounterReading140Over90
      with &quot;Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading&quot; ReferralToProfessional
        such that ReferralToProfessional.authoredOn during day of SecondHTNEncounterReading140Over90.period

define &quot;First Hypertensive Reading Interventions or Referral to Alternate Professional&quot;:
  ( [ServiceRequest: &quot;Follow Up Within 4 Weeks&quot;] FourWeekRescreen
      with &quot;NonPharmacological Interventions&quot; NonPharmInterventionsHTN
        such that FourWeekRescreen.authoredOn during day of &quot;Measurement Period&quot;
          and NonPharmInterventionsHTN.authoredOn during day of &quot;Measurement Period&quot;
          and FourWeekRescreen.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }
  )
    union ( &quot;Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading&quot; )

define &quot;Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading&quot;:
  [ServiceRequest: &quot;Referral to Primary Care or Alternate Provider&quot;] Referral
    where Referral.reasonCode in &quot;Finding of Elevated Blood Pressure or Hypertension&quot;
      and Referral.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }

define &quot;Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 Interventions&quot;:
  ( [ServiceRequest: &quot;Follow Up Within 4 Weeks&quot;] WeeksRescreen
      with &quot;Laboratory Test or ECG for Hypertension&quot; ECGLabTest
        such that WeeksRescreen.authoredOn during day of &quot;Measurement Period&quot;
          and ECGLabTest.authoredOn during day of &quot;Measurement Period&quot;
          and WeeksRescreen.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }
          and ECGLabTest.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }
      with &quot;NonPharmacological Interventions&quot; HTNInterventions
        such that HTNInterventions.authoredOn during day of &quot;Measurement Period&quot;
      with [&quot;MedicationRequest&quot;: &quot;Pharmacologic Therapy for Hypertension&quot;] Medications
        such that Medications.authoredOn during day of &quot;Measurement Period&quot;
          and Medications.status in { 'active', 'completed' }
  )

define &quot;Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 and Interventions&quot;:
  &quot;Follow up with Rescreen Within 6 Months&quot; Rescreen2to6
    with &quot;Laboratory Test or ECG for Hypertension&quot; LabECGIntervention
      such that Rescreen2to6.authoredOn during day of &quot;Measurement Period&quot;
        and LabECGIntervention.authoredOn during day of &quot;Measurement Period&quot;
    with &quot;NonPharmacological Interventions&quot; NonPharmSecondIntervention
      such that NonPharmSecondIntervention.authoredOn during day of &quot;Measurement Period&quot;

define &quot;Qualifying Encounter during Measurement Period&quot;:
  [Encounter: &quot;Encounter to Screen for Blood Pressure&quot;] ValidEncounter
    where ValidEncounter.period ends during day of &quot;Measurement Period&quot;
      and ValidEncounter.status ~ 'finished'
      and ValidEncounter.class !~ &quot;virtual&quot;

define &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80 and Interventions&quot;:
  ( &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80&quot; ElevatedEncounter
      with &quot;Follow up with Rescreen Within 6 Months&quot; Twoto6MonthRescreen
        such that Twoto6MonthRescreen.authoredOn during day of ElevatedEncounter.period
      with &quot;NonPharmacological Interventions&quot; NonPharmInterventions
        such that NonPharmInterventions.authoredOn during day of ElevatedEncounter.period
  )
    union ( &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80&quot; ElevatedEncounter
        with &quot;Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading&quot; Referral
          such that Referral.authoredOn during day of ElevatedEncounter.period
    )

define &quot;Encounter with Normal Blood Pressure Reading&quot;:
  &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter
    let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure
        where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period
          and BloodPressure.status in { 'final', 'amended', 'corrected' }
        sort by start of effective.toInterval ( )
    )
    where ( singleton from ( EncounterLastBP.component C
          where C.code ~ &quot;Systolic blood pressure&quot;
      )
    ).value in Interval[1 'mm[Hg]', 120 'mm[Hg]' )
      and ( singleton from ( EncounterLastBP.component C
            where C.code ~ &quot;Diastolic blood pressure&quot;
        )
      ).value in Interval[1 'mm[Hg]', 80 'mm[Hg]' )

define &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80&quot;:
  &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter
    let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure
        where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period
          and BloodPressure.status in { 'final', 'amended', 'corrected' }
        sort by start of effective.toInterval ( )
    )
    where ( ( singleton from ( EncounterLastBP.component C
            where C.code ~ &quot;Systolic blood pressure&quot;
        )
      ).value in Interval[120 'mm[Hg]', 129 'mm[Hg]']
        and ( singleton from ( EncounterLastBP.component C
              where C.code ~ &quot;Diastolic blood pressure&quot;
          )
        ).value in Interval[1 'mm[Hg]', 80 'mm[Hg]' )
    )

define &quot;Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90&quot;:
  ( ( &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter
        let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure
            where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period
              and BloodPressure.status in { 'final', 'amended', 'corrected' }
            sort by start of effective.toInterval ( )
        )
        where ( ( singleton from ( EncounterLastBP.component C
                where C.code ~ &quot;Systolic blood pressure&quot;
            )
          ).value &gt; 0 'mm[Hg]'
            and ( singleton from ( EncounterLastBP.component C
                  where C.code ~ &quot;Diastolic blood pressure&quot;
              )
            ).value &gt; 0 'mm[Hg]'
            and ( ( singleton from ( EncounterLastBP.component C
                    where C.code ~ &quot;Systolic blood pressure&quot;
                )
              ).value &gt;= 140 'mm[Hg]'
                or ( singleton from ( EncounterLastBP.component C
                      where C.code ~ &quot;Diastolic blood pressure&quot;
                  )
                ).value &gt;= 90 'mm[Hg]'
            )
        )
    )
      intersect &quot;Encounter with Hypertensive Reading Within Year Prior&quot;
  )

define &quot;Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89&quot;:
  ( ( &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter
        let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure
            where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period
              and BloodPressure.status in { 'final', 'amended', 'corrected' }
            sort by start of effective.toInterval ( )
        )
        where ( ( ( singleton from ( EncounterLastBP.component C
                  where C.code ~ &quot;Systolic blood pressure&quot;
              )
            ).value in Interval[130 'mm[Hg]', 139 'mm[Hg]']
              or ( singleton from ( EncounterLastBP.component C
                    where C.code ~ &quot;Diastolic blood pressure&quot;
                )
              ).value in Interval[80 'mm[Hg]', 89 'mm[Hg]']
          )
            and not ( ( singleton from ( EncounterLastBP.component C
                    where C.code ~ &quot;Systolic blood pressure&quot;
                )
              ).value &gt;= 140 'mm[Hg]'
                or ( singleton from ( EncounterLastBP.component C
                      where C.code ~ &quot;Diastolic blood pressure&quot;
                  )
                ).value &gt;= 90 'mm[Hg]'
            )
        )
    )
      intersect &quot;Encounter with Hypertensive Reading Within Year Prior&quot;
  )

define &quot;Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80&quot;:
  ( &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter
      let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure
          where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period
            and BloodPressure.status in { 'final', 'amended', 'corrected' }
          sort by start of effective.toInterval ( )
      )
      where ( ( ( singleton from ( EncounterLastBP.component C
                where C.code ~ &quot;Systolic blood pressure&quot;
            )
          ).value &gt; 0 'mm[Hg]'
            and ( singleton from ( EncounterLastBP.component C
                  where C.code ~ &quot;Diastolic blood pressure&quot;
              )
            ).value &gt; 0 'mm[Hg]'
        )
          and ( ( singleton from ( EncounterLastBP.component C
                  where C.code ~ &quot;Systolic blood pressure&quot;
              )
            ).value &gt;= 130 'mm[Hg]'
              or ( singleton from ( EncounterLastBP.component C
                    where C.code ~ &quot;Diastolic blood pressure&quot;
                )
              ).value &gt;= 80 'mm[Hg]'
          )
      )
  )
    except &quot;Encounter with Hypertensive Reading Within Year Prior&quot;

define &quot;Encounter with Hypertensive Reading Within Year Prior&quot;:
  ( &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter
      let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure
          where BloodPressure.effective.toInterval ( ) ends 1 year or less before or on start of QualifyingEncounter.period
            and BloodPressure.status in { 'final', 'amended', 'corrected' }
          sort by start of effective.toInterval ( )
      )
      where ( ( singleton from ( EncounterLastBP.component C
              where C.code ~ &quot;Systolic blood pressure&quot;
          )
        ).value &gt; 0 'mm[Hg]'
          and ( singleton from ( EncounterLastBP.component C
                where C.code ~ &quot;Diastolic blood pressure&quot;
            )
          ).value &gt; 0 'mm[Hg]'
          and ( ( singleton from ( EncounterLastBP.component C
                  where C.code ~ &quot;Systolic blood pressure&quot;
              )
            ).value &gt;= 130 'mm[Hg]'
              or ( singleton from ( EncounterLastBP.component C
                    where C.code ~ &quot;Diastolic blood pressure&quot;
                )
              ).value &gt;= 80 'mm[Hg]'
          )
      )
  )

define &quot;NonPharmacological Intervention Not Ordered&quot;:
  ( [ServiceNotRequested: &quot;Lifestyle Recommendation&quot;]
    union [ServiceNotRequested: &quot;Weight Reduction Recommended&quot;]
    union [ServiceNotRequested: &quot;Dietary Recommendations&quot;]
    union [ServiceNotRequested: &quot;Recommendation to Increase Physical Activity&quot;]
    union [ServiceNotRequested: &quot;Referral or Counseling for Alcohol Consumption&quot;] ) NonPharmIntervention
    where NonPharmIntervention.status in { 'active', 'completed', 'on-hold' }
      and NonPharmIntervention.reasonCode in &quot;Patient Declined&quot;

define &quot;Encounter with Medical Reason for Not Obtaining or Patient Declined Blood Pressure Measurement&quot;:
  &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter
    with ( [ObservationCancelled: code ~ &quot;Blood pressure panel with all children optional&quot;]
      union [ObservationCancelled: code ~ &quot;Systolic blood pressure&quot;]
      union [ObservationCancelled: code ~ &quot;Diastolic blood pressure&quot;] ) NoBPScreen
      such that NoBPScreen.issued during day of QualifyingEncounter.period
        and ( NoBPScreen.notDoneReason () in &quot;Patient Declined&quot;
            or NoBPScreen.notDoneReason () in &quot;Medical Reason&quot;
        )

define &quot;Encounter with Order for Hypertension Follow Up Declined by Patient&quot;:
  ( ( &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80&quot; ElevatedBPEncounter
        with ( [ServiceNotRequested: &quot;Referral to Primary Care or Alternate Provider&quot;]
          union [ServiceNotRequested: &quot;Follow Up Within 6 Months&quot;] ) ElevatedBPDeclinedInterventions
          such that ElevatedBPDeclinedInterventions.authoredOn during day of ElevatedBPEncounter.period
            and ElevatedBPDeclinedInterventions.status in { 'active', 'completed', 'on-hold' }
            and ElevatedBPDeclinedInterventions.reasonCode in &quot;Patient Declined&quot;
    )
      union ( &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80&quot; ElevatedBPEncounter
          with &quot;NonPharmacological Intervention Not Ordered&quot; NotOrdered
            such that NotOrdered.authoredOn during day of ElevatedBPEncounter.period
      )
      union ( &quot;Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80&quot; FirstHTNEncounter
          with ( [ServiceNotRequested: &quot;Follow Up Within 4 Weeks&quot;]
            union [ServiceNotRequested: &quot;Referral to Primary Care or Alternate Provider&quot;] ) FirstHTNDeclinedInterventions
            such that FirstHTNDeclinedInterventions.authoredOn during day of FirstHTNEncounter.period
              and FirstHTNDeclinedInterventions.status in { 'active', 'completed', 'on-hold' }
              and FirstHTNDeclinedInterventions.reasonCode in &quot;Patient Declined&quot;
      )
      union ( &quot;Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80&quot; FirstHTNEncounter
          with &quot;NonPharmacological Intervention Not Ordered&quot; NoNonPharm
            such that NoNonPharm.authoredOn during day of FirstHTNEncounter.period
      )
      union ( &quot;Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89&quot; SecondHTNEncounter
          with &quot;Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 Interventions Declined&quot; SecondHTNDeclinedInterventions
            such that SecondHTNDeclinedInterventions.authoredOn during day of SecondHTNEncounter.period
      )
      union ( &quot;Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90&quot; SecondHTN140Over90Encounter
          with &quot;Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 Interventions Declined&quot; SecondHTN140Over90DeclinedInterventions
            such that SecondHTN140Over90DeclinedInterventions.authoredOn during day of SecondHTN140Over90Encounter.period
      )
  )

define &quot;Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 Interventions Declined&quot;:
  ( ( [ServiceNotRequested: &quot;Referral to Primary Care or Alternate Provider&quot;]
      union [ServiceNotRequested: &quot;Follow Up Within 6 Months&quot;] ) SecondHTNDeclinedReferralAndFollowUp
      where SecondHTNDeclinedReferralAndFollowUp.status in { 'active', 'completed', 'on-hold' }
        and SecondHTNDeclinedReferralAndFollowUp.reasonCode in &quot;Patient Declined&quot;
  )
    union &quot;Laboratory Test or ECG for Hypertension Not Ordered&quot;
    union &quot;NonPharmacological Intervention Not Ordered&quot;

define &quot;Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 Interventions Declined&quot;:
  ( ( ( [ServiceNotRequested: &quot;Referral to Primary Care or Alternate Provider&quot;]
        union [ServiceNotRequested: &quot;Follow Up Within 4 Weeks&quot;] ) SecondHTN140Over90ReferralFollowUpNotDone
        where SecondHTN140Over90ReferralFollowUpNotDone.status in { 'active', 'completed', 'on-hold' }
          and SecondHTN140Over90ReferralFollowUpNotDone.reasonCode in &quot;Patient Declined&quot;
    )
      union ( [MedicationNotRequested: &quot;Pharmacologic Therapy for Hypertension&quot;] MedicationRequestNotOrdered
          where MedicationRequestNotOrdered.status in { 'active', 'completed' }
      )
      union &quot;Laboratory Test or ECG for Hypertension Not Ordered&quot;
      union &quot;NonPharmacological Intervention Not Ordered&quot;
  )

define &quot;Laboratory Test or ECG for Hypertension Not Ordered&quot;:
  ( [ServiceNotRequested: code = &quot;12 lead EKG panel&quot;]
    union [ServiceNotRequested: code = &quot;EKG study&quot;]
    union [ServiceNotRequested: &quot;Laboratory Tests for Hypertension&quot;] ) LabECGNotDone
    where LabECGNotDone.status in { 'active', 'completed', 'on-hold' }
      and LabECGNotDone.reasonCode in &quot;Patient Declined&quot;

define &quot;SDE Ethnicity&quot;:
  SDE.&quot;SDE Ethnicity&quot;

define &quot;SDE Payer&quot;:
  SDE.&quot;SDE Payer&quot;

define &quot;SDE Race&quot;:
  SDE.&quot;SDE Race&quot;

define &quot;SDE Sex&quot;:
  SDE.&quot;SDE Sex&quot;

/*
@description: Returns true if the given condition either has no verification status or has a verification status of confirmed, unconfirmed, provisional, or differential
*/


define fluent function isVerified(condition Choice&lt;ConditionProblemsHealthConcerns, ConditionEncounterDiagnosis&gt;):
  condition.verificationStatus is not null implies ( condition.verificationStatus ~ Status.&quot;confirmed&quot;
      or condition.verificationStatus ~ Status.&quot;unconfirmed&quot;
      or condition.verificationStatus ~ Status.&quot;provisional&quot;
      or condition.verificationStatus ~ Status.&quot;differential&quot;
  )</code></pre>
      </td>
    </tr>
    
  



<tr>
  <th colspan="2" scope="row" class="row-header">Generated using version 0.5.6 of the sample-content-ig Liquid templates</th>
</tr>

    </tbody>
  </table>
</div>
  </text>
  <extension
             url="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem">
    <valueReference>
      <reference value="Device/cqf-tooling"/>
    </valueReference>
  </extension>
  <url value="https://madie.cms.gov/Library/CMS22FHIRPCSBPScreeningFollowUp"/>
  <version value="1.1.000"/>
  <name value="CMS22FHIRPCSBPScreeningFollowUp"/>
  <status value="draft"/>
  <type>
    <coding>
      <system value="http://terminology.hl7.org/CodeSystem/library-type"/>
      <code value="logic-library"/>
    </coding>
  </type>
  <date value="2026-09-19T16:31:14+00:00"/>
  <content>
    <contentType value="text/cql"/>
    <data
          value="LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVMyMkZISVJQQ1NCUFNjcmVlbmluZ0ZvbGxvd1VwIHZlcnNpb24gJzEuMS4wMDAnCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5DdW11bGF0aXZlTWVkaWNhdGlvbkR1cmF0aW9uIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIENNRAppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHMgdmVyc2lvbiAnNi4xLjAwMCcgY2FsbGVkIFNERQppbmNsdWRlIFN0YXR1cyB2ZXJzaW9uICcyLjEuMDAwJyBjYWxsZWQgU3RhdHVzCgpjb2Rlc3lzdGVtICJBY3RDb2RlIjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjMtQWN0Q29kZScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiU05PTUVEQ1QiOiAnaHR0cDovL3Nub21lZC5pbmZvL3NjdCcKCnZhbHVlc2V0ICJEaWFnbm9zaXMgb2YgSHlwZXJ0ZW5zaW9uIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjYwMC4yNjMnCnZhbHVlc2V0ICJEaWV0YXJ5IFJlY29tbWVuZGF0aW9ucyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42MDAuMTUxNScKdmFsdWVzZXQgIkVuY291bnRlciB0byBTY3JlZW4gZm9yIEJsb29kIFByZXNzdXJlIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjYwMC4xOTIwJwp2YWx1ZXNldCAiRmluZGluZyBvZiBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBvciBIeXBlcnRlbnNpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ3LjUxNCcKdmFsdWVzZXQgIkZvbGxvdyBVcCBXaXRoaW4gNCBXZWVrcyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xNTc4Jwp2YWx1ZXNldCAiRm9sbG93IFVwIFdpdGhpbiA2IE1vbnRocyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExMDguMTI1Jwp2YWx1ZXNldCAiTGFib3JhdG9yeSBUZXN0cyBmb3IgSHlwZXJ0ZW5zaW9uIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjYwMC4xNDgyJwp2YWx1ZXNldCAiTGlmZXN0eWxlIFJlY29tbWVuZGF0aW9uIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjUyNi4zLjE1ODEnCnZhbHVlc2V0ICJNZWRpY2FsIFJlYXNvbiI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xMDA3Jwp2YWx1ZXNldCAiUGF0aWVudCBEZWNsaW5lZCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xNTgyJwp2YWx1ZXNldCAiUGhhcm1hY29sb2dpYyBUaGVyYXB5IGZvciBIeXBlcnRlbnNpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjE1NzcnCnZhbHVlc2V0ICJSZWNvbW1lbmRhdGlvbiB0byBJbmNyZWFzZSBQaHlzaWNhbCBBY3Rpdml0eSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42MDAuMTUxOCcKdmFsdWVzZXQgIlJlZmVycmFsIG9yIENvdW5zZWxpbmcgZm9yIEFsY29ob2wgQ29uc3VtcHRpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTU4MycKdmFsdWVzZXQgIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTU4MCcKdmFsdWVzZXQgIldlaWdodCBSZWR1Y3Rpb24gUmVjb21tZW5kZWQiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNjAwLjE1MTAnCgpjb2RlICJCbG9vZCBwcmVzc3VyZSBwYW5lbCB3aXRoIGFsbCBjaGlsZHJlbiBvcHRpb25hbCI6ICc4NTM1NC05JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnQmxvb2QgcHJlc3N1cmUgcGFuZWwgd2l0aCBhbGwgY2hpbGRyZW4gb3B0aW9uYWwnCmNvZGUgIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSI6ICc4NDYyLTQnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdEaWFzdG9saWMgYmxvb2QgcHJlc3N1cmUnCmNvZGUgIjEyIGxlYWQgRUtHIHBhbmVsIjogJzM0NTM0LTgnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdFS0cgMTIgY2hhbm5lbCBwYW5lbCcKY29kZSAiRUtHIHN0dWR5IjogJzExNTI0LTYnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdFS0cgc3R1ZHknCmNvZGUgIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIjogJzg0ODAtNicgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1N5c3RvbGljIGJsb29kIHByZXNzdXJlJwpjb2RlICJ2aXJ0dWFsIjogJ1ZSJyBmcm9tICJBY3RDb2RlIiBkaXNwbGF5ICd2aXJ0dWFsJwoKcGFyYW1ldGVyICJNZWFzdXJlbWVudCBQZXJpb2QiIEludGVydmFsPERhdGVUaW1lPgogIGRlZmF1bHQgSW50ZXJ2YWxbQDIwMjYtMDEtMDFUMDA6MDA6MDAuMDAwWiwgQDIwMjctMDEtMDFUMDA6MDA6MDAuMDAwWikKCmNvbnRleHQgUGF0aWVudAoKZGVmaW5lICJJbml0aWFsIFBvcHVsYXRpb24iOgogICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBRdWFsaWZ5aW5nRW5jb3VudGVyCiAgICB3aGVyZSBBZ2VJblllYXJzQXQoZGF0ZSBmcm9tIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA+PSAxOAoKZGVmaW5lICJEZW5vbWluYXRvciI6CiAgIkluaXRpYWwgUG9wdWxhdGlvbiIKCmRlZmluZSAiRGVub21pbmF0b3IgRXhjbHVzaW9ucyI6CiAgIlF1YWxpZnlpbmcgRW5jb3VudGVyIGR1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIFF1YWxpZnlpbmdFbmNvdW50ZXIKICAgIHdpdGggW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJEaWFnbm9zaXMgb2YgSHlwZXJ0ZW5zaW9uIl0gSHlwZXJ0ZW5zaW9uCiAgICAgIHN1Y2ggdGhhdCBIeXBlcnRlbnNpb24ucHJldmFsZW5jZUludGVydmFsICggKSBzdGFydHMgYmVmb3JlIG9yIG9uIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCBIeXBlcnRlbnNpb24uaXNWZXJpZmllZCAoICkKCmRlZmluZSAiTnVtZXJhdG9yIjoKICAiRW5jb3VudGVyIHdpdGggTm9ybWFsIEJsb29kIFByZXNzdXJlIFJlYWRpbmciCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBSZWFkaW5nIFNCUCAxMjAgdG8gMTI5IEFORCBEQlAgbGVzcyB0aGFuIDgwIGFuZCBJbnRlcnZlbnRpb25zIiApCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBGaXJzdCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDEzMCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDgwIGFuZCBJbnRlcnZlbnRpb25zIiApCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIDEzMCB0byAxMzkgT1IgREJQIDgwIHRvIDg5IGFuZCBJbnRlcnZlbnRpb25zIiApCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxNDAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA5MCBhbmQgSW50ZXJ2ZW50aW9ucyIgKQoKZGVmaW5lICJEZW5vbWluYXRvciBFeGNlcHRpb25zIjoKICAiRW5jb3VudGVyIHdpdGggTWVkaWNhbCBSZWFzb24gZm9yIE5vdCBPYnRhaW5pbmcgb3IgUGF0aWVudCBEZWNsaW5lZCBCbG9vZCBQcmVzc3VyZSBNZWFzdXJlbWVudCIKICAgIHVuaW9uICJFbmNvdW50ZXIgd2l0aCBPcmRlciBmb3IgSHlwZXJ0ZW5zaW9uIEZvbGxvdyBVcCBEZWNsaW5lZCBieSBQYXRpZW50IgoKZGVmaW5lICJGb2xsb3cgdXAgd2l0aCBSZXNjcmVlbiBXaXRoaW4gNiBNb250aHMiOgogIFtTZXJ2aWNlUmVxdWVzdDogIkZvbGxvdyBVcCBXaXRoaW4gNiBNb250aHMiXSBGb2xsb3dVcAogICAgd2hlcmUgRm9sbG93VXAuaW50ZW50IH4gJ29yZGVyJwoKZGVmaW5lICJMYWJvcmF0b3J5IFRlc3Qgb3IgRUNHIGZvciBIeXBlcnRlbnNpb24iOgogICggW1NlcnZpY2VSZXF1ZXN0OiAiMTIgbGVhZCBFS0cgcGFuZWwiXQogICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiRUtHIHN0dWR5Il0KICAgIHVuaW9uIFtTZXJ2aWNlUmVxdWVzdDogIkxhYm9yYXRvcnkgVGVzdHMgZm9yIEh5cGVydGVuc2lvbiJdICkgRUtHTGFiCiAgICB3aGVyZSBFS0dMYWIuaW50ZW50IGluIHsgJ29yZGVyJywgJ29yaWdpbmFsLW9yZGVyJywgJ3JlZmxleC1vcmRlcicsICdmaWxsZXItb3JkZXInLCAnaW5zdGFuY2Utb3JkZXInIH0KCmRlZmluZSAiTm9uUGhhcm1hY29sb2dpY2FsIEludGVydmVudGlvbnMiOgogICggW1NlcnZpY2VSZXF1ZXN0OiAiTGlmZXN0eWxlIFJlY29tbWVuZGF0aW9uIl0KICAgIHVuaW9uIFtTZXJ2aWNlUmVxdWVzdDogIldlaWdodCBSZWR1Y3Rpb24gUmVjb21tZW5kZWQiXQogICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiRGlldGFyeSBSZWNvbW1lbmRhdGlvbnMiXQogICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiUmVjb21tZW5kYXRpb24gdG8gSW5jcmVhc2UgUGh5c2ljYWwgQWN0aXZpdHkiXQogICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiUmVmZXJyYWwgb3IgQ291bnNlbGluZyBmb3IgQWxjb2hvbCBDb25zdW1wdGlvbiJdICkgTm9uUGhhcm1hSW50ZXJ2ZW50aW9ucwogICAgd2hlcmUgTm9uUGhhcm1hSW50ZXJ2ZW50aW9ucy5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQoKZGVmaW5lICJFbmNvdW50ZXIgd2l0aCBGaXJzdCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDEzMCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDgwIGFuZCBJbnRlcnZlbnRpb25zIjoKICAiRW5jb3VudGVyIHdpdGggRmlyc3QgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxMzAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA4MCIgRmlyc3RIVE5FbmNvdW50ZXIKICAgIHdpdGggIkZpcnN0IEh5cGVydGVuc2l2ZSBSZWFkaW5nIEludGVydmVudGlvbnMgb3IgUmVmZXJyYWwgdG8gQWx0ZXJuYXRlIFByb2Zlc3Npb25hbCIgRmlyc3RIVE5JbnRlcnZlbnRpb24KICAgICAgc3VjaCB0aGF0IEZpcnN0SFROSW50ZXJ2ZW50aW9uLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBGaXJzdEhUTkVuY291bnRlci5wZXJpb2QKCmRlZmluZSAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSBhbmQgSW50ZXJ2ZW50aW9ucyI6CiAgKCAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSIgU2Vjb25kSFRORW5jb3VudGVyUmVhZGluZwogICAgICB3aXRoICJTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIDEzMCB0byAxMzkgT1IgREJQIDgwIHRvIDg5IGFuZCBJbnRlcnZlbnRpb25zIiBFbmNvdW50ZXJJbnRlcnZlbnRpb25zCiAgICAgICAgc3VjaCB0aGF0IEVuY291bnRlckludGVydmVudGlvbnMuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIFNlY29uZEhUTkVuY291bnRlclJlYWRpbmcucGVyaW9kCiAgKQogICAgdW5pb24gKCAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSIgU2Vjb25kSFRORW5jb3VudGVyUmVhZGluZwogICAgICAgIHdpdGggIlJlZmVycmFsIHRvIEFsdGVybmF0ZSBvciBQcmltYXJ5IEhlYWx0aGNhcmUgUHJvZmVzc2lvbmFsIGZvciBIeXBlcnRlbnNpdmUgUmVhZGluZyIgUmVmZXJyYWxGb3JIVE4KICAgICAgICAgIHN1Y2ggdGhhdCBSZWZlcnJhbEZvckhUTi5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgU2Vjb25kSFRORW5jb3VudGVyUmVhZGluZy5wZXJpb2QKICAgICkKCmRlZmluZSAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTQwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gOTAgYW5kIEludGVydmVudGlvbnMiOgogICggIkVuY291bnRlciB3aXRoIFNlY29uZCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDE0MCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDkwIiBTZWNvbmRIVE5FbmNvdW50ZXJSZWFkaW5nMTQwT3ZlcjkwCiAgICAgIHdpdGggIlNlY29uZCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDE0MCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDkwIEludGVydmVudGlvbnMiIFNlY29uZEhUTjE0ME92ZXI5MEludGVydmVudGlvbnMKICAgICAgICBzdWNoIHRoYXQgU2Vjb25kSFROMTQwT3ZlcjkwSW50ZXJ2ZW50aW9ucy5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgU2Vjb25kSFRORW5jb3VudGVyUmVhZGluZzE0ME92ZXI5MC5wZXJpb2QKICApCiAgICB1bmlvbiAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTQwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gOTAiIFNlY29uZEhUTkVuY291bnRlclJlYWRpbmcxNDBPdmVyOTAKICAgICAgd2l0aCAiUmVmZXJyYWwgdG8gQWx0ZXJuYXRlIG9yIFByaW1hcnkgSGVhbHRoY2FyZSBQcm9mZXNzaW9uYWwgZm9yIEh5cGVydGVuc2l2ZSBSZWFkaW5nIiBSZWZlcnJhbFRvUHJvZmVzc2lvbmFsCiAgICAgICAgc3VjaCB0aGF0IFJlZmVycmFsVG9Qcm9mZXNzaW9uYWwuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIFNlY29uZEhUTkVuY291bnRlclJlYWRpbmcxNDBPdmVyOTAucGVyaW9kCgpkZWZpbmUgIkZpcnN0IEh5cGVydGVuc2l2ZSBSZWFkaW5nIEludGVydmVudGlvbnMgb3IgUmVmZXJyYWwgdG8gQWx0ZXJuYXRlIFByb2Zlc3Npb25hbCI6CiAgKCBbU2VydmljZVJlcXVlc3Q6ICJGb2xsb3cgVXAgV2l0aGluIDQgV2Vla3MiXSBGb3VyV2Vla1Jlc2NyZWVuCiAgICAgIHdpdGggIk5vblBoYXJtYWNvbG9naWNhbCBJbnRlcnZlbnRpb25zIiBOb25QaGFybUludGVydmVudGlvbnNIVE4KICAgICAgICBzdWNoIHRoYXQgRm91cldlZWtSZXNjcmVlbi5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICAgIGFuZCBOb25QaGFybUludGVydmVudGlvbnNIVE4uYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAgICAgICBhbmQgRm91cldlZWtSZXNjcmVlbi5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQogICkKICAgIHVuaW9uICggIlJlZmVycmFsIHRvIEFsdGVybmF0ZSBvciBQcmltYXJ5IEhlYWx0aGNhcmUgUHJvZmVzc2lvbmFsIGZvciBIeXBlcnRlbnNpdmUgUmVhZGluZyIgKQoKZGVmaW5lICJSZWZlcnJhbCB0byBBbHRlcm5hdGUgb3IgUHJpbWFyeSBIZWFsdGhjYXJlIFByb2Zlc3Npb25hbCBmb3IgSHlwZXJ0ZW5zaXZlIFJlYWRpbmciOgogIFtTZXJ2aWNlUmVxdWVzdDogIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiXSBSZWZlcnJhbAogICAgd2hlcmUgUmVmZXJyYWwucmVhc29uQ29kZSBpbiAiRmluZGluZyBvZiBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBvciBIeXBlcnRlbnNpb24iCiAgICAgIGFuZCBSZWZlcnJhbC5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQoKZGVmaW5lICJTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxNDAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA5MCBJbnRlcnZlbnRpb25zIjoKICAoIFtTZXJ2aWNlUmVxdWVzdDogIkZvbGxvdyBVcCBXaXRoaW4gNCBXZWVrcyJdIFdlZWtzUmVzY3JlZW4KICAgICAgd2l0aCAiTGFib3JhdG9yeSBUZXN0IG9yIEVDRyBmb3IgSHlwZXJ0ZW5zaW9uIiBFQ0dMYWJUZXN0CiAgICAgICAgc3VjaCB0aGF0IFdlZWtzUmVzY3JlZW4uYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAgICAgICBhbmQgRUNHTGFiVGVzdC5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICAgIGFuZCBXZWVrc1Jlc2NyZWVuLmludGVudCBpbiB7ICdvcmRlcicsICdvcmlnaW5hbC1vcmRlcicsICdyZWZsZXgtb3JkZXInLCAnZmlsbGVyLW9yZGVyJywgJ2luc3RhbmNlLW9yZGVyJyB9CiAgICAgICAgICBhbmQgRUNHTGFiVGVzdC5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQogICAgICB3aXRoICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9ucyIgSFROSW50ZXJ2ZW50aW9ucwogICAgICAgIHN1Y2ggdGhhdCBIVE5JbnRlcnZlbnRpb25zLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICB3aXRoIFsiTWVkaWNhdGlvblJlcXVlc3QiOiAiUGhhcm1hY29sb2dpYyBUaGVyYXB5IGZvciBIeXBlcnRlbnNpb24iXSBNZWRpY2F0aW9ucwogICAgICAgIHN1Y2ggdGhhdCBNZWRpY2F0aW9ucy5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICAgIGFuZCBNZWRpY2F0aW9ucy5zdGF0dXMgaW4geyAnYWN0aXZlJywgJ2NvbXBsZXRlZCcgfQogICkKCmRlZmluZSAiU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSBhbmQgSW50ZXJ2ZW50aW9ucyI6CiAgIkZvbGxvdyB1cCB3aXRoIFJlc2NyZWVuIFdpdGhpbiA2IE1vbnRocyIgUmVzY3JlZW4ydG82CiAgICB3aXRoICJMYWJvcmF0b3J5IFRlc3Qgb3IgRUNHIGZvciBIeXBlcnRlbnNpb24iIExhYkVDR0ludGVydmVudGlvbgogICAgICBzdWNoIHRoYXQgUmVzY3JlZW4ydG82LmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICAgIGFuZCBMYWJFQ0dJbnRlcnZlbnRpb24uYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICB3aXRoICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9ucyIgTm9uUGhhcm1TZWNvbmRJbnRlcnZlbnRpb24KICAgICAgc3VjaCB0aGF0IE5vblBoYXJtU2Vjb25kSW50ZXJ2ZW50aW9uLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgoKZGVmaW5lICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICBbRW5jb3VudGVyOiAiRW5jb3VudGVyIHRvIFNjcmVlbiBmb3IgQmxvb2QgUHJlc3N1cmUiXSBWYWxpZEVuY291bnRlcgogICAgd2hlcmUgVmFsaWRFbmNvdW50ZXIucGVyaW9kIGVuZHMgZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICBhbmQgVmFsaWRFbmNvdW50ZXIuc3RhdHVzIH4gJ2ZpbmlzaGVkJwogICAgICBhbmQgVmFsaWRFbmNvdW50ZXIuY2xhc3MgIX4gInZpcnR1YWwiCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIEVsZXZhdGVkIEJsb29kIFByZXNzdXJlIFJlYWRpbmcgU0JQIDEyMCB0byAxMjkgQU5EIERCUCBsZXNzIHRoYW4gODAgYW5kIEludGVydmVudGlvbnMiOgogICggIkVuY291bnRlciB3aXRoIEVsZXZhdGVkIEJsb29kIFByZXNzdXJlIFJlYWRpbmcgU0JQIDEyMCB0byAxMjkgQU5EIERCUCBsZXNzIHRoYW4gODAiIEVsZXZhdGVkRW5jb3VudGVyCiAgICAgIHdpdGggIkZvbGxvdyB1cCB3aXRoIFJlc2NyZWVuIFdpdGhpbiA2IE1vbnRocyIgVHdvdG82TW9udGhSZXNjcmVlbgogICAgICAgIHN1Y2ggdGhhdCBUd290bzZNb250aFJlc2NyZWVuLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBFbGV2YXRlZEVuY291bnRlci5wZXJpb2QKICAgICAgd2l0aCAiTm9uUGhhcm1hY29sb2dpY2FsIEludGVydmVudGlvbnMiIE5vblBoYXJtSW50ZXJ2ZW50aW9ucwogICAgICAgIHN1Y2ggdGhhdCBOb25QaGFybUludGVydmVudGlvbnMuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIEVsZXZhdGVkRW5jb3VudGVyLnBlcmlvZAogICkKICAgIHVuaW9uICggIkVuY291bnRlciB3aXRoIEVsZXZhdGVkIEJsb29kIFByZXNzdXJlIFJlYWRpbmcgU0JQIDEyMCB0byAxMjkgQU5EIERCUCBsZXNzIHRoYW4gODAiIEVsZXZhdGVkRW5jb3VudGVyCiAgICAgICAgd2l0aCAiUmVmZXJyYWwgdG8gQWx0ZXJuYXRlIG9yIFByaW1hcnkgSGVhbHRoY2FyZSBQcm9mZXNzaW9uYWwgZm9yIEh5cGVydGVuc2l2ZSBSZWFkaW5nIiBSZWZlcnJhbAogICAgICAgICAgc3VjaCB0aGF0IFJlZmVycmFsLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBFbGV2YXRlZEVuY291bnRlci5wZXJpb2QKICAgICkKCmRlZmluZSAiRW5jb3VudGVyIHdpdGggTm9ybWFsIEJsb29kIFByZXNzdXJlIFJlYWRpbmciOgogICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBRdWFsaWZ5aW5nRW5jb3VudGVyCiAgICBsZXQgRW5jb3VudGVyTGFzdEJQOiBMYXN0KFtVU0NvcmUuQmxvb2RQcmVzc3VyZVByb2ZpbGVdIEJsb29kUHJlc3N1cmUKICAgICAgICB3aGVyZSBCbG9vZFByZXNzdXJlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBlbmRzIGR1cmluZyBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlci5wZXJpb2QKICAgICAgICAgIGFuZCBCbG9vZFByZXNzdXJlLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgIHNvcnQgYnkgc3RhcnQgb2YgZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApCiAgICApCiAgICB3aGVyZSAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICkKICAgICkudmFsdWUgaW4gSW50ZXJ2YWxbMSAnbW1bSGddJywgMTIwICdtbVtIZ10nICkKICAgICAgYW5kICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICApCiAgICAgICkudmFsdWUgaW4gSW50ZXJ2YWxbMSAnbW1bSGddJywgODAgJ21tW0hnXScgKQoKZGVmaW5lICJFbmNvdW50ZXIgd2l0aCBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBSZWFkaW5nIFNCUCAxMjAgdG8gMTI5IEFORCBEQlAgbGVzcyB0aGFuIDgwIjoKICAiUXVhbGlmeWluZyBFbmNvdW50ZXIgZHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCIgUXVhbGlmeWluZ0VuY291bnRlcgogICAgbGV0IEVuY291bnRlckxhc3RCUDogTGFzdChbVVNDb3JlLkJsb29kUHJlc3N1cmVQcm9maWxlXSBCbG9vZFByZXNzdXJlCiAgICAgICAgd2hlcmUgQmxvb2RQcmVzc3VyZS5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICkgZW5kcyBkdXJpbmcgZGF5IG9mIFF1YWxpZnlpbmdFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgICBhbmQgQmxvb2RQcmVzc3VyZS5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICBzb3J0IGJ5IHN0YXJ0IG9mIGVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICAgKQogICAgd2hlcmUgKCAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJTeXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICApCiAgICAgICkudmFsdWUgaW4gSW50ZXJ2YWxbMTIwICdtbVtIZ10nLCAxMjkgJ21tW0hnXSddCiAgICAgICAgYW5kICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiRGlhc3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgKQogICAgICAgICkudmFsdWUgaW4gSW50ZXJ2YWxbMSAnbW1bSGddJywgODAgJ21tW0hnXScgKQogICAgKQoKZGVmaW5lICJFbmNvdW50ZXIgd2l0aCBTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxNDAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA5MCI6CiAgKCAoICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBRdWFsaWZ5aW5nRW5jb3VudGVyCiAgICAgICAgbGV0IEVuY291bnRlckxhc3RCUDogTGFzdChbVVNDb3JlLkJsb29kUHJlc3N1cmVQcm9maWxlXSBCbG9vZFByZXNzdXJlCiAgICAgICAgICAgIHdoZXJlIEJsb29kUHJlc3N1cmUuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIGVuZHMgZHVyaW5nIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVyLnBlcmlvZAogICAgICAgICAgICAgIGFuZCBCbG9vZFByZXNzdXJlLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgICAgICBzb3J0IGJ5IHN0YXJ0IG9mIGVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICAgICAgICkKICAgICAgICB3aGVyZSAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJTeXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICAgICAgKQogICAgICAgICAgKS52YWx1ZSA+IDAgJ21tW0hnXScKICAgICAgICAgICAgYW5kICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICAgICAgICApCiAgICAgICAgICAgICkudmFsdWUgPiAwICdtbVtIZ10nCiAgICAgICAgICAgIGFuZCAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgKS52YWx1ZSA+PSAxNDAgJ21tW0hnXScKICAgICAgICAgICAgICAgIG9yICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJEaWFzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkudmFsdWUgPj0gOTAgJ21tW0hnXScKICAgICAgICAgICAgKQogICAgICAgICkKICAgICkKICAgICAgaW50ZXJzZWN0ICJFbmNvdW50ZXIgd2l0aCBIeXBlcnRlbnNpdmUgUmVhZGluZyBXaXRoaW4gWWVhciBQcmlvciIKICApCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIFNlY29uZCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgMTMwIHRvIDEzOSBPUiBEQlAgODAgdG8gODkiOgogICggKCAiUXVhbGlmeWluZyBFbmNvdW50ZXIgZHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCIgUXVhbGlmeWluZ0VuY291bnRlcgogICAgICAgIGxldCBFbmNvdW50ZXJMYXN0QlA6IExhc3QoW1VTQ29yZS5CbG9vZFByZXNzdXJlUHJvZmlsZV0gQmxvb2RQcmVzc3VyZQogICAgICAgICAgICB3aGVyZSBCbG9vZFByZXNzdXJlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBlbmRzIGR1cmluZyBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlci5wZXJpb2QKICAgICAgICAgICAgICBhbmQgQmxvb2RQcmVzc3VyZS5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICAgICAgc29ydCBieSBzdGFydCBvZiBlZmZlY3RpdmUudG9JbnRlcnZhbCAoICkKICAgICAgICApCiAgICAgICAgd2hlcmUgKCAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgICAgICkKICAgICAgICAgICAgKS52YWx1ZSBpbiBJbnRlcnZhbFsxMzAgJ21tW0hnXScsIDEzOSAnbW1bSGddJ10KICAgICAgICAgICAgICBvciAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApLnZhbHVlIGluIEludGVydmFsWzgwICdtbVtIZ10nLCA4OSAnbW1bSGddJ10KICAgICAgICAgICkKICAgICAgICAgICAgYW5kIG5vdCAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgKS52YWx1ZSA+PSAxNDAgJ21tW0hnXScKICAgICAgICAgICAgICAgIG9yICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJEaWFzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkudmFsdWUgPj0gOTAgJ21tW0hnXScKICAgICAgICAgICAgKQogICAgICAgICkKICAgICkKICAgICAgaW50ZXJzZWN0ICJFbmNvdW50ZXIgd2l0aCBIeXBlcnRlbnNpdmUgUmVhZGluZyBXaXRoaW4gWWVhciBQcmlvciIKICApCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIEZpcnN0IEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTMwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gODAiOgogICggIlF1YWxpZnlpbmcgRW5jb3VudGVyIGR1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIFF1YWxpZnlpbmdFbmNvdW50ZXIKICAgICAgbGV0IEVuY291bnRlckxhc3RCUDogTGFzdChbVVNDb3JlLkJsb29kUHJlc3N1cmVQcm9maWxlXSBCbG9vZFByZXNzdXJlCiAgICAgICAgICB3aGVyZSBCbG9vZFByZXNzdXJlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBlbmRzIGR1cmluZyBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlci5wZXJpb2QKICAgICAgICAgICAgYW5kIEJsb29kUHJlc3N1cmUuc3RhdHVzIGluIHsgJ2ZpbmFsJywgJ2FtZW5kZWQnLCAnY29ycmVjdGVkJyB9CiAgICAgICAgICBzb3J0IGJ5IHN0YXJ0IG9mIGVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICAgICApCiAgICAgIHdoZXJlICggKCAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICkKICAgICAgICAgICkudmFsdWUgPiAwICdtbVtIZ10nCiAgICAgICAgICAgIGFuZCAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJEaWFzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgKQogICAgICAgICAgICApLnZhbHVlID4gMCAnbW1bSGddJwogICAgICAgICkKICAgICAgICAgIGFuZCAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgICAgICkKICAgICAgICAgICAgKS52YWx1ZSA+PSAxMzAgJ21tW0hnXScKICAgICAgICAgICAgICBvciAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApLnZhbHVlID49IDgwICdtbVtIZ10nCiAgICAgICAgICApCiAgICAgICkKICApCiAgICBleGNlcHQgIkVuY291bnRlciB3aXRoIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFdpdGhpbiBZZWFyIFByaW9yIgoKZGVmaW5lICJFbmNvdW50ZXIgd2l0aCBIeXBlcnRlbnNpdmUgUmVhZGluZyBXaXRoaW4gWWVhciBQcmlvciI6CiAgKCAiUXVhbGlmeWluZyBFbmNvdW50ZXIgZHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCIgUXVhbGlmeWluZ0VuY291bnRlcgogICAgICBsZXQgRW5jb3VudGVyTGFzdEJQOiBMYXN0KFtVU0NvcmUuQmxvb2RQcmVzc3VyZVByb2ZpbGVdIEJsb29kUHJlc3N1cmUKICAgICAgICAgIHdoZXJlIEJsb29kUHJlc3N1cmUuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIGVuZHMgMSB5ZWFyIG9yIGxlc3MgYmVmb3JlIG9yIG9uIHN0YXJ0IG9mIFF1YWxpZnlpbmdFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgICAgIGFuZCBCbG9vZFByZXNzdXJlLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgICAgc29ydCBieSBzdGFydCBvZiBlZmZlY3RpdmUudG9JbnRlcnZhbCAoICkKICAgICAgKQogICAgICB3aGVyZSAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICApCiAgICAgICAgKS52YWx1ZSA+IDAgJ21tW0hnXScKICAgICAgICAgIGFuZCAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiRGlhc3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgICApCiAgICAgICAgICApLnZhbHVlID4gMCAnbW1bSGddJwogICAgICAgICAgYW5kICggKCBzaW5nbGV0b24gZnJvbSAoIEVuY291bnRlckxhc3RCUC5jb21wb25lbnQgQwogICAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgKQogICAgICAgICAgICApLnZhbHVlID49IDEzMCAnbW1bSGddJwogICAgICAgICAgICAgIG9yICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiRGlhc3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICkudmFsdWUgPj0gODAgJ21tW0hnXScKICAgICAgICAgICkKICAgICAgKQogICkKCmRlZmluZSAiTm9uUGhhcm1hY29sb2dpY2FsIEludGVydmVudGlvbiBOb3QgT3JkZXJlZCI6CiAgKCBbU2VydmljZU5vdFJlcXVlc3RlZDogIkxpZmVzdHlsZSBSZWNvbW1lbmRhdGlvbiJdCiAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIldlaWdodCBSZWR1Y3Rpb24gUmVjb21tZW5kZWQiXQogICAgdW5pb24gW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJEaWV0YXJ5IFJlY29tbWVuZGF0aW9ucyJdCiAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIlJlY29tbWVuZGF0aW9uIHRvIEluY3JlYXNlIFBoeXNpY2FsIEFjdGl2aXR5Il0KICAgIHVuaW9uIFtTZXJ2aWNlTm90UmVxdWVzdGVkOiAiUmVmZXJyYWwgb3IgQ291bnNlbGluZyBmb3IgQWxjb2hvbCBDb25zdW1wdGlvbiJdICkgTm9uUGhhcm1JbnRlcnZlbnRpb24KICAgIHdoZXJlIE5vblBoYXJtSW50ZXJ2ZW50aW9uLnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnIH0KICAgICAgYW5kIE5vblBoYXJtSW50ZXJ2ZW50aW9uLnJlYXNvbkNvZGUgaW4gIlBhdGllbnQgRGVjbGluZWQiCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIE1lZGljYWwgUmVhc29uIGZvciBOb3QgT2J0YWluaW5nIG9yIFBhdGllbnQgRGVjbGluZWQgQmxvb2QgUHJlc3N1cmUgTWVhc3VyZW1lbnQiOgogICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBRdWFsaWZ5aW5nRW5jb3VudGVyCiAgICB3aXRoICggW09ic2VydmF0aW9uQ2FuY2VsbGVkOiBjb2RlIH4gIkJsb29kIHByZXNzdXJlIHBhbmVsIHdpdGggYWxsIGNoaWxkcmVuIG9wdGlvbmFsIl0KICAgICAgdW5pb24gW09ic2VydmF0aW9uQ2FuY2VsbGVkOiBjb2RlIH4gIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIl0KICAgICAgdW5pb24gW09ic2VydmF0aW9uQ2FuY2VsbGVkOiBjb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSJdICkgTm9CUFNjcmVlbgogICAgICBzdWNoIHRoYXQgTm9CUFNjcmVlbi5pc3N1ZWQgZHVyaW5nIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCAoIE5vQlBTY3JlZW4ubm90RG9uZVJlYXNvbiAoKSBpbiAiUGF0aWVudCBEZWNsaW5lZCIKICAgICAgICAgICAgb3IgTm9CUFNjcmVlbi5ub3REb25lUmVhc29uICgpIGluICJNZWRpY2FsIFJlYXNvbiIKICAgICAgICApCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIE9yZGVyIGZvciBIeXBlcnRlbnNpb24gRm9sbG93IFVwIERlY2xpbmVkIGJ5IFBhdGllbnQiOgogICggKCAiRW5jb3VudGVyIHdpdGggRWxldmF0ZWQgQmxvb2QgUHJlc3N1cmUgUmVhZGluZyBTQlAgMTIwIHRvIDEyOSBBTkQgREJQIGxlc3MgdGhhbiA4MCIgRWxldmF0ZWRCUEVuY291bnRlcgogICAgICAgIHdpdGggKCBbU2VydmljZU5vdFJlcXVlc3RlZDogIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiXQogICAgICAgICAgdW5pb24gW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJGb2xsb3cgVXAgV2l0aGluIDYgTW9udGhzIl0gKSBFbGV2YXRlZEJQRGVjbGluZWRJbnRlcnZlbnRpb25zCiAgICAgICAgICBzdWNoIHRoYXQgRWxldmF0ZWRCUERlY2xpbmVkSW50ZXJ2ZW50aW9ucy5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgRWxldmF0ZWRCUEVuY291bnRlci5wZXJpb2QKICAgICAgICAgICAgYW5kIEVsZXZhdGVkQlBEZWNsaW5lZEludGVydmVudGlvbnMuc3RhdHVzIGluIHsgJ2FjdGl2ZScsICdjb21wbGV0ZWQnLCAnb24taG9sZCcgfQogICAgICAgICAgICBhbmQgRWxldmF0ZWRCUERlY2xpbmVkSW50ZXJ2ZW50aW9ucy5yZWFzb25Db2RlIGluICJQYXRpZW50IERlY2xpbmVkIgogICAgKQogICAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBSZWFkaW5nIFNCUCAxMjAgdG8gMTI5IEFORCBEQlAgbGVzcyB0aGFuIDgwIiBFbGV2YXRlZEJQRW5jb3VudGVyCiAgICAgICAgICB3aXRoICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9uIE5vdCBPcmRlcmVkIiBOb3RPcmRlcmVkCiAgICAgICAgICAgIHN1Y2ggdGhhdCBOb3RPcmRlcmVkLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBFbGV2YXRlZEJQRW5jb3VudGVyLnBlcmlvZAogICAgICApCiAgICAgIHVuaW9uICggIkVuY291bnRlciB3aXRoIEZpcnN0IEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTMwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gODAiIEZpcnN0SFRORW5jb3VudGVyCiAgICAgICAgICB3aXRoICggW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJGb2xsb3cgVXAgV2l0aGluIDQgV2Vla3MiXQogICAgICAgICAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiXSApIEZpcnN0SFRORGVjbGluZWRJbnRlcnZlbnRpb25zCiAgICAgICAgICAgIHN1Y2ggdGhhdCBGaXJzdEhUTkRlY2xpbmVkSW50ZXJ2ZW50aW9ucy5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgRmlyc3RIVE5FbmNvdW50ZXIucGVyaW9kCiAgICAgICAgICAgICAgYW5kIEZpcnN0SFRORGVjbGluZWRJbnRlcnZlbnRpb25zLnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnIH0KICAgICAgICAgICAgICBhbmQgRmlyc3RIVE5EZWNsaW5lZEludGVydmVudGlvbnMucmVhc29uQ29kZSBpbiAiUGF0aWVudCBEZWNsaW5lZCIKICAgICAgKQogICAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBGaXJzdCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDEzMCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDgwIiBGaXJzdEhUTkVuY291bnRlcgogICAgICAgICAgd2l0aCAiTm9uUGhhcm1hY29sb2dpY2FsIEludGVydmVudGlvbiBOb3QgT3JkZXJlZCIgTm9Ob25QaGFybQogICAgICAgICAgICBzdWNoIHRoYXQgTm9Ob25QaGFybS5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgRmlyc3RIVE5FbmNvdW50ZXIucGVyaW9kCiAgICAgICkKICAgICAgdW5pb24gKCAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSIgU2Vjb25kSFRORW5jb3VudGVyCiAgICAgICAgICB3aXRoICJTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIDEzMCB0byAxMzkgT1IgREJQIDgwIHRvIDg5IEludGVydmVudGlvbnMgRGVjbGluZWQiIFNlY29uZEhUTkRlY2xpbmVkSW50ZXJ2ZW50aW9ucwogICAgICAgICAgICBzdWNoIHRoYXQgU2Vjb25kSFRORGVjbGluZWRJbnRlcnZlbnRpb25zLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBTZWNvbmRIVE5FbmNvdW50ZXIucGVyaW9kCiAgICAgICkKICAgICAgdW5pb24gKCAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTQwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gOTAiIFNlY29uZEhUTjE0ME92ZXI5MEVuY291bnRlcgogICAgICAgICAgd2l0aCAiU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTQwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gOTAgSW50ZXJ2ZW50aW9ucyBEZWNsaW5lZCIgU2Vjb25kSFROMTQwT3ZlcjkwRGVjbGluZWRJbnRlcnZlbnRpb25zCiAgICAgICAgICAgIHN1Y2ggdGhhdCBTZWNvbmRIVE4xNDBPdmVyOTBEZWNsaW5lZEludGVydmVudGlvbnMuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIFNlY29uZEhUTjE0ME92ZXI5MEVuY291bnRlci5wZXJpb2QKICAgICAgKQogICkKCmRlZmluZSAiU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSBJbnRlcnZlbnRpb25zIERlY2xpbmVkIjoKICAoICggW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJSZWZlcnJhbCB0byBQcmltYXJ5IENhcmUgb3IgQWx0ZXJuYXRlIFByb3ZpZGVyIl0KICAgICAgdW5pb24gW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJGb2xsb3cgVXAgV2l0aGluIDYgTW9udGhzIl0gKSBTZWNvbmRIVE5EZWNsaW5lZFJlZmVycmFsQW5kRm9sbG93VXAKICAgICAgd2hlcmUgU2Vjb25kSFRORGVjbGluZWRSZWZlcnJhbEFuZEZvbGxvd1VwLnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnIH0KICAgICAgICBhbmQgU2Vjb25kSFRORGVjbGluZWRSZWZlcnJhbEFuZEZvbGxvd1VwLnJlYXNvbkNvZGUgaW4gIlBhdGllbnQgRGVjbGluZWQiCiAgKQogICAgdW5pb24gIkxhYm9yYXRvcnkgVGVzdCBvciBFQ0cgZm9yIEh5cGVydGVuc2lvbiBOb3QgT3JkZXJlZCIKICAgIHVuaW9uICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9uIE5vdCBPcmRlcmVkIgoKZGVmaW5lICJTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxNDAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA5MCBJbnRlcnZlbnRpb25zIERlY2xpbmVkIjoKICAoICggKCBbU2VydmljZU5vdFJlcXVlc3RlZDogIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiXQogICAgICAgIHVuaW9uIFtTZXJ2aWNlTm90UmVxdWVzdGVkOiAiRm9sbG93IFVwIFdpdGhpbiA0IFdlZWtzIl0gKSBTZWNvbmRIVE4xNDBPdmVyOTBSZWZlcnJhbEZvbGxvd1VwTm90RG9uZQogICAgICAgIHdoZXJlIFNlY29uZEhUTjE0ME92ZXI5MFJlZmVycmFsRm9sbG93VXBOb3REb25lLnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnIH0KICAgICAgICAgIGFuZCBTZWNvbmRIVE4xNDBPdmVyOTBSZWZlcnJhbEZvbGxvd1VwTm90RG9uZS5yZWFzb25Db2RlIGluICJQYXRpZW50IERlY2xpbmVkIgogICAgKQogICAgICB1bmlvbiAoIFtNZWRpY2F0aW9uTm90UmVxdWVzdGVkOiAiUGhhcm1hY29sb2dpYyBUaGVyYXB5IGZvciBIeXBlcnRlbnNpb24iXSBNZWRpY2F0aW9uUmVxdWVzdE5vdE9yZGVyZWQKICAgICAgICAgIHdoZXJlIE1lZGljYXRpb25SZXF1ZXN0Tm90T3JkZXJlZC5zdGF0dXMgaW4geyAnYWN0aXZlJywgJ2NvbXBsZXRlZCcgfQogICAgICApCiAgICAgIHVuaW9uICJMYWJvcmF0b3J5IFRlc3Qgb3IgRUNHIGZvciBIeXBlcnRlbnNpb24gTm90IE9yZGVyZWQiCiAgICAgIHVuaW9uICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9uIE5vdCBPcmRlcmVkIgogICkKCmRlZmluZSAiTGFib3JhdG9yeSBUZXN0IG9yIEVDRyBmb3IgSHlwZXJ0ZW5zaW9uIE5vdCBPcmRlcmVkIjoKICAoIFtTZXJ2aWNlTm90UmVxdWVzdGVkOiBjb2RlID0gIjEyIGxlYWQgRUtHIHBhbmVsIl0KICAgIHVuaW9uIFtTZXJ2aWNlTm90UmVxdWVzdGVkOiBjb2RlID0gIkVLRyBzdHVkeSJdCiAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIkxhYm9yYXRvcnkgVGVzdHMgZm9yIEh5cGVydGVuc2lvbiJdICkgTGFiRUNHTm90RG9uZQogICAgd2hlcmUgTGFiRUNHTm90RG9uZS5zdGF0dXMgaW4geyAnYWN0aXZlJywgJ2NvbXBsZXRlZCcsICdvbi1ob2xkJyB9CiAgICAgIGFuZCBMYWJFQ0dOb3REb25lLnJlYXNvbkNvZGUgaW4gIlBhdGllbnQgRGVjbGluZWQiCgpkZWZpbmUgIlNERSBFdGhuaWNpdHkiOgogIFNERS4iU0RFIEV0aG5pY2l0eSIKCmRlZmluZSAiU0RFIFBheWVyIjoKICBTREUuIlNERSBQYXllciIKCmRlZmluZSAiU0RFIFJhY2UiOgogIFNERS4iU0RFIFJhY2UiCgpkZWZpbmUgIlNERSBTZXgiOgogIFNERS4iU0RFIFNleCIKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBjb25kaXRpb24gZWl0aGVyIGhhcyBubyB2ZXJpZmljYXRpb24gc3RhdHVzIG9yIGhhcyBhIHZlcmlmaWNhdGlvbiBzdGF0dXMgb2YgY29uZmlybWVkLCB1bmNvbmZpcm1lZCwgcHJvdmlzaW9uYWwsIG9yIGRpZmZlcmVudGlhbAoqLwoKCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gaXNWZXJpZmllZChjb25kaXRpb24gQ2hvaWNlPENvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnMsIENvbmRpdGlvbkVuY291bnRlckRpYWdub3Npcz4pOgogIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgaXMgbm90IG51bGwgaW1wbGllcyAoIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuImNvbmZpcm1lZCIKICAgICAgb3IgY29uZGl0aW9uLnZlcmlmaWNhdGlvblN0YXR1cyB+IFN0YXR1cy4idW5jb25maXJtZWQiCiAgICAgIG9yIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuInByb3Zpc2lvbmFsIgogICAgICBvciBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJkaWZmZXJlbnRpYWwiCiAgKQ=="/>
    <url
         value="https://madie.cms.gov/Library-CMS22FHIRPCSBPScreeningFollowUp.cql"/>
  </content>
</Library>