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
| Draft as of 2026-09-19 |
<Library xmlns="http://hl7.org/fhir">
<id value="NHSNAcuteCareHospitalMonthlyInitialPopulation1"/>
<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 NHSNAcuteCareHospitalMonthlyInitialPopulation1 version '1.1.000'
// Rebased to QI Core 6.0.0
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.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 CQMCommon version '5.1.000' called CQMCommon
// NHSNHelpers logic is inlined below
codesystem "ActCode": 'http://terminology.hl7.org/CodeSystem/v3-ActCode'
codesystem "Observation Category": 'http://terminology.hl7.org/CodeSystem/observation-category'
codesystem "LOINC": 'http://loinc.org'
codesystem "Condition Category": 'http://terminology.hl7.org/CodeSystem/condition-category'
codesystem "US Core Condition Category": 'http://hl7.org/fhir/us/core/CodeSystem/condition-category'
codesystem "Condition Clinical Status": 'http://terminology.hl7.org/CodeSystem/condition-clinical'
codesystem "SNOMEDCT": 'http://snomed.info/sct'
codesystem "MedicationRequest Category": 'http://terminology.hl7.org/CodeSystem/medicationrequest-category'
valueset "Inpatient, Emergency, and Observation Locations": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.265'
valueset "Emergency Department Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292'
valueset "Encounter Inpatient": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307'
valueset "Observation Services": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143'
valueset "NHSN Inpatient Encounter Class Codes": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274'
// Observation Category codes
code "laboratory": 'laboratory' from "Observation Category" display 'Laboratory'
code "social-history": 'social-history' from "Observation Category" display 'Social History'
code "vital-signs": 'vital-signs' from "Observation Category" display 'Vital Signs'
code "imaging": 'imaging' from "Observation Category" display 'Imaging'
code "procedure": 'procedure' from "Observation Category" display 'Procedure'
code "survey": 'survey' from "Observation Category" display 'Survey'
// Condition category
code "encounter-diagnosis": 'encounter-diagnosis' from "Condition Category" display 'Encounter Diagnosis'
// Diagnostic Report Category (LOINC-based)
code "Radiology": 'LP29684-5' from "LOINC" display 'Radiology'
code "Pathology": 'LP7839-6' from "LOINC" display 'Pathology'
code "Cardiology": 'LP29708-2' from "LOINC" display 'Cardiology'
// Emergency Encounter Class
code "emergency": 'EMER' from "ActCode" display 'emergency'
code "observation encounter": 'OBSENC' from "ActCode" display 'observation encounter'
// Condition clinicalStatus
code "active": 'active' from "Condition Clinical Status" display 'active'
// Procedure category
code "Surgical procedure": '387713003' from "SNOMEDCT" display 'Surgical procedure'
code "Diagnostic procedure": '103693007' from "SNOMEDCT" display 'Diagnostic procedure'
// MedicationRequest category
code "inpatient": 'inpatient' from "MedicationRequest Category" display 'Inpatient'
code "outpatient": 'outpatient' from "MedicationRequest Category" display 'Outpatient'
// ServiceRequest category
code "Laboratory procedure": '108252007' from "SNOMEDCT" display 'Laboratory procedure'
code "Imaging": '363679005' from "SNOMEDCT" display 'Imaging'
parameter "Measurement Period" Interval<DateTime>
default Interval[@2026-01-01T00:00:00.000Z, @2026-02-01T00:00:00.000Z)
context Patient
// ----------------------------------------------------------------------
// Core encounter logic
// ----------------------------------------------------------------------
// Encounters with NHSN class codes (IMP, ACUTE, NONAC, SS)
define "Encounters with NHSN Inpatient Class":
[Encounter] Enc
where Enc.class ~ USQualityCoreCommon."inpatient encounter"
or Enc.class ~ USQualityCoreCommon."inpatient acute"
or Enc.class ~ USQualityCoreCommon."inpatient non-acute"
or Enc.class ~ USQualityCoreCommon."short stay"
define "Qualifying Encounters During Measurement Period":
( [Encounter: "Encounter Inpatient"]
union [Encounter: "Emergency Department Visit"]
union [Encounter: "Observation Services"]
union "Encounters with NHSN Inpatient Class"
union [Encounter: class ~ "emergency"]
union [Encounter: class ~ "observation encounter"] ) QualifyingEncounters
where QualifyingEncounters.status in { 'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error' }
and QualifyingEncounters.period overlaps "Measurement Period"
define "Encounters":
[Encounter]
define "Encounters with Patient Hospital Locations":
"Encounters" Ens
where exists ( Ens.location EncounterLocation
where EncounterLocation.period overlaps Ens.period
and EncounterLocation.location.getLocation ( ).type in "Inpatient, Emergency, and Observation Locations"
)
and Ens.status in { 'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error' }
and Ens.period overlaps "Measurement Period"
define "Initial Population":
"Qualifying Encounters During Measurement Period"
union "Encounters with Patient Hospital Locations"
// ----------------------------------------------------------------------
// Core retrieves
// ----------------------------------------------------------------------
// Locations from IP encounters
define "Get Locations from IP Encounters in Measurement Period":
flatten ( "Initial Population" IP
let locationElements: IP.location
return locationElements LE
let locationReference: LE.location
return locationReference.getLocation ( )
)
// ----------------------------------------------------------------------
// SDEs
// ----------------------------------------------------------------------
define "SDE Condition Problems HealthConcerns":
[ConditionProblemsHealthConcerns] Diagnosis
where exists ( "Initial Population" IP
where Diagnosis.prevalenceInterval ( ) overlaps day of IP.period
)
return {
id: Diagnosis.id,
meta: Diagnosis.meta,
status: Diagnosis.clinicalStatus,
verificationStatus: Diagnosis.verificationStatus,
category: Diagnosis.category,
severity: Diagnosis.severity,
code: Diagnosis.code,
bodySite: Diagnosis.bodySite,
subject: Diagnosis.subject,
encounterReferenceId: Diagnosis.encounter.reference.getId ( ),
onset: Diagnosis.onset,
stage: Diagnosis.stage,
evidence: Diagnosis.evidence,
note: Diagnosis.note
}
define "SDE Condition Diagnosis":
[ConditionEncounterDiagnosis] Diagnosis
where exists ( "Initial Population" IP
where Diagnosis.prevalenceInterval ( ) overlaps day of IP.period
)
return {
id: Diagnosis.id,
meta: Diagnosis.meta,
status: Diagnosis.clinicalStatus,
verificationStatus: Diagnosis.verificationStatus,
category: Diagnosis.category,
severity: Diagnosis.severity,
code: Diagnosis.code,
bodySite: Diagnosis.bodySite,
subject: Diagnosis.subject,
encounterReferenceId: Diagnosis.encounter.reference.getId ( ),
onset: Diagnosis.onset,
stage: Diagnosis.stage,
evidence: Diagnosis.evidence,
note: Diagnosis.note
}
// Coverage SDE – tuples of Coverage data
define "SDE Coverage":
[Coverage] Coverages
where exists ( "Initial Population" IP
where Coverages.period overlaps IP.period
)
return {
id: Coverages.id,
meta: Coverages.meta,
status: Coverages.status,
type: Coverages.type,
policyHolder: Coverages.policyHolder,
subscriber: Coverages.subscriber,
subscriberId: Coverages.subscriberId,
beneficiary: Coverages.beneficiary,
dependent: Coverages.dependent,
relationship: Coverages.relationship,
period: Coverages.period,
payor: Coverages.payor,
class: Coverages.class,
order: Coverages.order,
network: Coverages.network,
subrogation: Coverages.subrogation,
contract: Coverages.contract
}
// Device SDE – tuples of Device data
define "SDE Device":
[Device] Devices
where exists ( "Initial Population" )
return {
id: Devices.id,
meta: Devices.meta,
extension: Devices.extension,
status: Devices.status,
expirationDate: Devices.expirationDate,
lotNumber: Devices.lotNumber,
serialNumber: Devices.serialNumber,
modelNumber: Devices.modelNumber,
partNumber: Devices.partNumber,
type: Devices.type,
patient: Devices.patient,
parent: Devices.parent
}
// DiagnosticReport SDEs
define "SDE DiagnosticReport Lab":
[DiagnosticReportLab] dr
where exists ( "Initial Population" IP
where "Normalize Interval"(dr.effective) overlaps IP.period
)
define "SDE DiagnosticReport Note":
[DiagnosticReportNote] dr
where ( exists ( dr.category Category
where Category ~ "Radiology"
)
or exists ( dr.category Category
where Category ~ "Pathology"
)
or exists ( dr.category Category
where Category ~ "Cardiology"
)
)
and exists ( "Initial Population" IP
where "Normalize Interval"(dr.effective) overlaps IP.period
)
return {
id: dr.id,
meta: dr.meta,
extension: dr.extension,
basedOn: dr.basedOn,
status: dr.status,
category: dr.category,
code: dr.code,
subject: dr.subject,
encounter: dr.encounter,
effective: dr.effective,
issued: dr.issued,
specimen: dr.specimen,
result: dr.result,
conclusion: dr.conclusion,
conclusionCode: dr.conclusionCode
}
define "SDE DiagnosticReport Others":
[DiagnosticReportNote] dr
where not ( exists ( dr.category Category
where Category ~ "Radiology"
)
or exists ( dr.category Category
where Category ~ "Pathology"
)
or exists ( dr.category Category
where Category ~ "Cardiology"
)
)
and exists ( "Initial Population" IP
where "Normalize Interval"(dr.effective) overlaps IP.period
)
return {
id: dr.id,
meta: dr.meta,
extension: dr.extension,
basedOn: dr.basedOn,
status: dr.status,
category: dr.category,
code: dr.code,
subject: dr.subject,
encounter: dr.encounter,
effective: dr.effective,
issued: dr.issued,
specimen: dr.specimen,
result: dr.result,
conclusion: dr.conclusion,
conclusionCode: dr.conclusionCode
}
// Encounter SDEs
define "SDE Encounter":
"Encounters" Ens
where not "CheckIP"(Ens)
and exists ( "Initial Population" IP
where Ens.period overlaps IP.period
)
return {
id: Ens.id,
meta: Ens.meta,
identifier: Ens.identifier,
status: Ens.status,
statusHistory: Ens.statusHistory,
class: Ens.class,
classHistory: Ens.classHistory,
type: Ens.type,
serviceType: Ens.serviceType,
priority: Ens.priority,
subject: Ens.subject,
period: Ens.period,
length: Ens.length,
reasonCode: Ens.reasonCode,
reasonReference: Ens.reasonReference,
diagnosis: Ens.diagnosis,
account: Ens.account,
hospitalization: Ens.hospitalization,
location: Ens.location,
partOf: Ens.partOf
}
define "SDE IP Encounters":
"Initial Population" IP
return {
id: IP.id,
meta: IP.meta,
identifier: IP.identifier,
status: IP.status,
statusHistory: IP.statusHistory,
class: IP.class,
classHistory: IP.classHistory,
type: IP.type,
serviceType: IP.serviceType,
priority: IP.priority,
subject: IP.subject,
period: IP.period,
length: IP.length,
reasonCode: IP.reasonCode,
reasonReference: IP.reasonReference,
diagnosis: IP.diagnosis,
account: IP.account,
hospitalization: IP.hospitalization,
location: IP.location,
partOf: IP.partOf
}
// Location SDE
define "SDE Location":
"Get Locations from IP Encounters in Measurement Period" Locations
where exists ( "Initial Population" )
and Locations is not null
return {
id: Locations.id,
meta: Locations.meta,
extension: Locations.extension,
status: Locations.status,
operationalStatus: Locations.operationalStatus,
name: Locations.name,
alias: Locations.alias,
description: Locations.description,
mode: Locations.mode,
type: Locations.type,
telecom: Locations.telecom,
address: Locations.address,
physicalType: Locations.physicalType,
position: Locations.position,
managingOrganization: Locations.managingOrganization,
partOf: Locations.partOf,
hoursOfOperation: Locations.hoursOfOperation,
availabilityExceptions: Locations.availabilityExceptions,
endpoint: Locations.endpoint
}
// Medication SDEs
define "SDE Medication Administration":
"SDE Medication Administration Base"
union "SDE Medication Administration Not Done"
define "SDE Medication Administration Base":
[MedicationAdministration] MedAdministrations
where exists ( "Initial Population" IP
where "Normalize Interval"(MedAdministrations.effective) overlaps IP.period
)
return {
id: MedAdministrations.id,
meta: MedAdministrations.meta,
instantiates: MedAdministrations.instantiates,
partOf: MedAdministrations.partOf,
status: MedAdministrations.status,
statusReason: MedAdministrations.statusReason,
category: MedAdministrations.category,
medication: MedAdministrations.medication,
subject: MedAdministrations.subject,
context: MedAdministrations.context,
supportingInformation: MedAdministrations.supportingInformation,
effective: MedAdministrations.effective,
performer: MedAdministrations.performer,
reasonCode: MedAdministrations.reasonCode,
reasonReference: MedAdministrations.reasonReference,
request: MedAdministrations.request,
device: MedAdministrations.device,
note: MedAdministrations.note,
dosage: MedAdministrations.dosage
}
define "SDE Medication Administration Not Done":
[MedicationAdministrationNotDone] MedAdministrations
where exists ( "Initial Population" IP
where "Normalize Interval"(MedAdministrations.effective) overlaps IP.period
)
return {
id: MedAdministrations.id,
meta: MedAdministrations.meta,
instantiates: MedAdministrations.instantiates,
partOf: MedAdministrations.partOf,
status: MedAdministrations.status,
statusReason: MedAdministrations.statusReason,
category: MedAdministrations.category,
medication: MedAdministrations.medication,
subject: MedAdministrations.subject,
context: MedAdministrations.context,
supportingInformation: MedAdministrations.supportingInformation,
effective: MedAdministrations.effective,
performer: MedAdministrations.performer,
reasonCode: MedAdministrations.reasonCode,
reasonReference: MedAdministrations.reasonReference,
request: MedAdministrations.request,
device: MedAdministrations.device,
note: MedAdministrations.note,
dosage: MedAdministrations.dosage
}
// SDE Medication Request - regular requests (doNotPerform is false or absent)
define "SDE Medication Request Base":
[MedicationRequest] MedRequests
where exists ( "Initial Population" IP
where MedRequests.authoredOn during IP.period
)
return {
id: MedRequests.id,
meta: MedRequests.meta,
status: MedRequests.status,
statusReason: MedRequests.statusReason,
intent: MedRequests.intent,
category: MedRequests.category,
priority: MedRequests.priority,
//doNotPerform: MedRequests.doNotPerform,
reported: MedRequests.reported,
medication: MedRequests.medication,
subject: MedRequests.subject,
encounter: MedRequests.encounter,
authoredOn: MedRequests.authoredOn,
requester: MedRequests.requester,
recorder: MedRequests.recorder,
reasonCode: MedRequests.reasonCode,
reasonReference: MedRequests.reasonReference,
instantiatesCanonical: MedRequests.instantiatesCanonical,
instantiatesUri: MedRequests.instantiatesUri,
courseOfTherapyType: MedRequests.courseOfTherapyType,
dosageInstruction: MedRequests.dosageInstruction
}
// SDE Medication Not Requested - negation requests (doNotPerform is true)
define "SDE Medication Not Requested":
[MedicationNotRequested] MedNotRequests
where exists ( "Initial Population" IP
where MedNotRequests.authoredOn during IP.period
)
return {
id: MedNotRequests.id,
meta: MedNotRequests.meta,
status: MedNotRequests.status,
statusReason: MedNotRequests.statusReason,
intent: MedNotRequests.intent,
category: MedNotRequests.category,
priority: MedNotRequests.priority,
doNotPerform: MedNotRequests.doNotPerform,
reported: MedNotRequests.reported,
medication: MedNotRequests.medication,
subject: MedNotRequests.subject,
encounter: MedNotRequests.encounter,
authoredOn: MedNotRequests.authoredOn,
requester: MedNotRequests.requester,
recorder: MedNotRequests.recorder,
reasonCode: MedNotRequests.reasonCode,
reasonReference: MedNotRequests.reasonReference,
instantiatesCanonical: MedNotRequests.instantiatesCanonical,
instantiatesUri: MedNotRequests.instantiatesUri,
courseOfTherapyType: MedNotRequests.courseOfTherapyType,
dosageInstruction: MedNotRequests.dosageInstruction
}
// Combined SDE for all Medication Requests (both regular and negation)
define "SDE Medication Request":
"SDE Medication Request Base"
union "SDE Medication Not Requested"
define function "GetMedication"(reference Reference):
singleton from ( [Medication] Medication
where reference.references ( Medication )
)
define "SDE Medication":
( [MedicationRequest]
union [MedicationAdministration] ) MedReqOrAdmin
let medication: GetMedication(MedReqOrAdmin.medication as Reference)
where medication is not null
and exists ( "Initial Population" IP
where Coalesce("Normalize Interval"(MedReqOrAdmin.effective), MedReqOrAdmin.authoredOn.toInterval()) overlaps IP.period
)
return {
id: medication.id,
meta: medication.meta,
code: medication.code,
status: medication.status,
manufacturer: medication.manufacturer,
form: medication.form,
amount: medication.amount,
ingredient: medication.ingredient,
batch: medication.batch
}
// Observation SDEs
define "SDE Observation Lab Category":
[LaboratoryResultObservation] Obs
where exists ( "Initial Population" IP
where "Normalize Interval"(Obs.effective) overlaps IP.period
)
return {
id: Obs.id,
meta: Obs.meta,
extension: Obs.extension,
partOf: Obs.partOf,
status: Obs.status,
category: Obs.category,
code: Obs.code,
subject: Obs.subject,
encounter: Obs.encounter,
effective: Obs.effective,
issued: Obs.issued,
value: Obs.value,
dataAbsentReason: Obs.dataAbsentReason,
interpretation: Obs.interpretation,
bodySite: Obs.bodySite,
method: Obs.method,
specimen: Obs.specimen,
referenceRange: Obs.referenceRange,
hasMember: Obs.hasMember,
derivedFrom: Obs.derivedFrom,
component: Obs.component
}
define "SDE Observation Simple":
[SimpleObservation] Obs
where ( exists ( Obs.category Category
where Category ~ "social-history"
)
or exists ( Obs.category Category
where Category ~ "imaging"
)
or exists ( Obs.category Category
where Category ~ "procedure"
)
)
and exists ( "Initial Population" IP
where "Normalize Interval"(Obs.effective) overlaps IP.period
)
return {
id: Obs.id,
meta: Obs.meta,
extension: Obs.extension,
partOf: Obs.partOf,
status: Obs.status,
category: Obs.category,
code: Obs.code,
subject: Obs.subject,
encounter: Obs.encounter,
effective: Obs.effective,
issued: Obs.issued,
value: Obs.value,
dataAbsentReason: Obs.dataAbsentReason,
interpretation: Obs.interpretation,
bodySite: Obs.bodySite,
method: Obs.method,
specimen: Obs.specimen,
referenceRange: Obs.referenceRange,
hasMember: Obs.hasMember,
derivedFrom: Obs.derivedFrom,
component: Obs.component
}
// Survey is fixed category code in ObservationScreeningAssessment profile in QI-Core
define "SDE Observation Survey":
[ObservationScreeningAssessment] Obs
where exists ( "Initial Population" IP
where "Normalize Interval"(Obs.effective) overlaps IP.period
)
return {
id: Obs.id,
meta: Obs.meta,
extension: Obs.extension,
partOf: Obs.partOf,
status: Obs.status,
category: Obs.category,
code: Obs.code,
subject: Obs.subject,
encounter: Obs.encounter,
effective: Obs.effective,
issued: Obs.issued,
value: Obs.value,
dataAbsentReason: Obs.dataAbsentReason,
interpretation: Obs.interpretation,
bodySite: Obs.bodySite,
method: Obs.method,
specimen: Obs.specimen,
referenceRange: Obs.referenceRange,
hasMember: Obs.hasMember,
derivedFrom: Obs.derivedFrom,
component: Obs.component
}
define "SDE Observation Vital Signs Category":
[USCore.VitalSignsProfile] Obs
where exists ( "Initial Population" IP
where "Normalize Interval"(Obs.effective) overlaps IP.period
)
return {
id: Obs.id,
meta: Obs.meta,
extension: Obs.extension,
partOf: Obs.partOf,
status: Obs.status,
category: Obs.category,
code: Obs.code,
subject: Obs.subject,
encounter: Obs.encounter,
effective: Obs.effective,
issued: Obs.issued,
value: Obs.value,
dataAbsentReason: Obs.dataAbsentReason,
interpretation: Obs.interpretation,
bodySite: Obs.bodySite,
method: Obs.method,
specimen: Obs.specimen,
referenceRange: Obs.referenceRange,
hasMember: Obs.hasMember,
derivedFrom: Obs.derivedFrom,
component: Obs.component
}
// Procedure SDE
define "SDE Procedure":
[Procedure] Procedures
where exists ( "Initial Population" IP
where "Normalize Interval"(Procedures.performed) overlaps IP.period
)
return {
id: Procedures.id,
meta: Procedures.meta,
extension: Procedures.extension,
basedOn: Procedures.basedOn,
partOf: Procedures.partOf,
status: Procedures.status,
category: Procedures.category,
code: Procedures.code,
subject: Procedures.subject,
encounter: Procedures.encounter,
performed: Procedures.performed,
location: Procedures.location,
reasonCode: Procedures.reasonCode,
reasonReference: Procedures.reasonReference,
bodySite: Procedures.bodySite
}
// ServiceRequest SDE - regular requests (doNotPerform is false or absent)
define "SDE Service Request Base":
[ServiceRequest] ServiceRequests
where exists ( "Initial Population" IP
where ServiceRequests.authoredOn during IP.period
)
return {
id: ServiceRequests.id,
meta: ServiceRequests.meta,
instantiatesCanonical: ServiceRequests.instantiatesCanonical,
instantiatesUri: ServiceRequests.instantiatesUri,
basedOn: ServiceRequests.basedOn,
replaces: ServiceRequests.replaces,
requisition: ServiceRequests.requisition,
status: ServiceRequests.status,
intent: ServiceRequests.intent,
category: ServiceRequests.category,
priority: ServiceRequests.priority,
//doNotPerform: ServiceRequests.doNotPerform,
code: ServiceRequests.code,
orderDetail: ServiceRequests.orderDetail,
quantity: ServiceRequests.quantity,
subject: ServiceRequests.subject,
encounter: ServiceRequests.encounter,
occurrence: ServiceRequests.occurrence,
asNeeded: ServiceRequests.asNeeded,
authoredOn: ServiceRequests.authoredOn,
requester: ServiceRequests.requester,
performerType: ServiceRequests.performerType,
performer: ServiceRequests.performer,
locationCode: ServiceRequests.locationCode,
reasonCode: ServiceRequests.reasonCode,
reasonReference: ServiceRequests.reasonReference,
insurance: ServiceRequests.insurance,
bodySite: ServiceRequests.bodySite,
note: ServiceRequests.note,
patientInstruction: ServiceRequests.patientInstruction
}
// ServiceNotRequested SDE - negation requests (doNotPerform is true)
define "SDE Service Not Requested":
[ServiceNotRequested] ServiceNotReqs
where exists ( "Initial Population" IP
where ServiceNotReqs.authoredOn during IP.period
)
return {
id: ServiceNotReqs.id,
meta: ServiceNotReqs.meta,
instantiatesCanonical: ServiceNotReqs.instantiatesCanonical,
instantiatesUri: ServiceNotReqs.instantiatesUri,
basedOn: ServiceNotReqs.basedOn,
replaces: ServiceNotReqs.replaces,
requisition: ServiceNotReqs.requisition,
status: ServiceNotReqs.status,
intent: ServiceNotReqs.intent,
category: ServiceNotReqs.category,
priority: ServiceNotReqs.priority,
doNotPerform: ServiceNotReqs.doNotPerform,
code: ServiceNotReqs.code,
orderDetail: ServiceNotReqs.orderDetail,
quantity: ServiceNotReqs.quantity,
subject: ServiceNotReqs.subject,
encounter: ServiceNotReqs.encounter,
occurrence: ServiceNotReqs.occurrence,
asNeeded: ServiceNotReqs.asNeeded,
authoredOn: ServiceNotReqs.authoredOn,
requester: ServiceNotReqs.requester,
performerType: ServiceNotReqs.performerType,
performer: ServiceNotReqs.performer,
locationCode: ServiceNotReqs.locationCode,
reasonCode: ServiceNotReqs.reasonCode,
reasonReference: ServiceNotReqs.reasonReference,
insurance: ServiceNotReqs.insurance,
bodySite: ServiceNotReqs.bodySite,
note: ServiceNotReqs.note,
patientInstruction: ServiceNotReqs.patientInstruction
}
// Combined SDE for all Service Requests (both regular and negation)
define "SDE Service Request":
"SDE Service Request Base"
union "SDE Service Not Requested"
// Minimal patient SDE
define "SDE Minimal Patient":
[Patient] MinPt
where exists ( "Initial Population" )
return {
id: MinPt.id,
meta: MinPt.meta,
extension: MinPt.extension,
identifier: MinPt.identifier,
active: MinPt.active,
name: MinPt.name,
telecom: MinPt.telecom,
gender: MinPt.gender,
birthDate: MinPt.birthDate,
deceased: MinPt.deceased,
address: MinPt.address,
maritalStatus: MinPt.maritalStatus,
multipleBirth: MinPt.multipleBirth,
photo: MinPt.photo,
contact: MinPt.contact,
communication: MinPt.communication,
generalPractitioner: MinPt.generalPractitioner,
managingOrganization: MinPt.managingOrganization,
link: MinPt.link
}
define "SDE Specimens":
[USCore.SpecimenProfile] sp
where exists ( "Initial Population" IP
where "Normalize Interval"(sp.collection.collected) overlaps IP.period
)
return {
id: sp.id,
type: sp.type
}
// ----------------------------------------------------------------------
// Helper functions
// ----------------------------------------------------------------------
define function "CheckIP"(encounter Encounter):
exists ( "Initial Population" IP
where encounter.id = IP.id
)
// Former NHSNHelpers functions, adapted for QI Core
define function "Normalize Interval"(choice Choice<DateTime, Interval<DateTime>>):
case
when choice is DateTime then Interval[choice as DateTime, choice as DateTime]
when choice is Interval<DateTime>then choice as Interval<DateTime>
else null as Interval<DateTime>end
define function "GetLocation"(reference Reference):
singleton from ( [Location] Locations
where Locations.id = GetId(reference.reference)
)
define function "GetId"(uri String):
Last(Split(uri, '/'))
define function "GetId"(uri FHIR.string):
Last(Split(FHIRHelpers.ToString(uri), '/'))</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/NHSNAcuteCareHospitalMonthlyInitialPopulation1"/>
<version value="1.1.000"/>
<name value="NHSNAcuteCareHospitalMonthlyInitialPopulation1"/>
<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="LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBOSFNOQWN1dGVDYXJlSG9zcGl0YWxNb250aGx5SW5pdGlhbFBvcHVsYXRpb24xIHZlcnNpb24gJzEuMS4wMDAnCgovLyBSZWJhc2VkIHRvIFFJIENvcmUgNi4wLjAKCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHMgdmVyc2lvbiAnNi4xLjAwMCcgY2FsbGVkIFNERQppbmNsdWRlIENRTUNvbW1vbiB2ZXJzaW9uICc1LjEuMDAwJyBjYWxsZWQgQ1FNQ29tbW9uCi8vIE5IU05IZWxwZXJzIGxvZ2ljIGlzIGlubGluZWQgYmVsb3cKCgpjb2Rlc3lzdGVtICJBY3RDb2RlIjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjMtQWN0Q29kZScKY29kZXN5c3RlbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9vYnNlcnZhdGlvbi1jYXRlZ29yeScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiQ29uZGl0aW9uIENhdGVnb3J5IjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vY29uZGl0aW9uLWNhdGVnb3J5Jwpjb2Rlc3lzdGVtICJVUyBDb3JlIENvbmRpdGlvbiBDYXRlZ29yeSI6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL2NvcmUvQ29kZVN5c3RlbS9jb25kaXRpb24tY2F0ZWdvcnknCmNvZGVzeXN0ZW0gIkNvbmRpdGlvbiBDbGluaWNhbCBTdGF0dXMiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9jb25kaXRpb24tY2xpbmljYWwnCmNvZGVzeXN0ZW0gIlNOT01FRENUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIk1lZGljYXRpb25SZXF1ZXN0IENhdGVnb3J5IjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vbWVkaWNhdGlvbnJlcXVlc3QtY2F0ZWdvcnknCgp2YWx1ZXNldCAiSW5wYXRpZW50LCBFbWVyZ2VuY3ksIGFuZCBPYnNlcnZhdGlvbiBMb2NhdGlvbnMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ2LjI2NScKdmFsdWVzZXQgIkVtZXJnZW5jeSBEZXBhcnRtZW50IFZpc2l0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yOTInCnZhbHVlc2V0ICJFbmNvdW50ZXIgSW5wYXRpZW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjY2Ni41LjMwNycKdmFsdWVzZXQgIk9ic2VydmF0aW9uIFNlcnZpY2VzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTExMS4xNDMnCnZhbHVlc2V0ICJOSFNOIElucGF0aWVudCBFbmNvdW50ZXIgQ2xhc3MgQ29kZXMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ2LjI3NCcKCi8vIE9ic2VydmF0aW9uIENhdGVnb3J5IGNvZGVzCgoKY29kZSAibGFib3JhdG9yeSI6ICdsYWJvcmF0b3J5JyBmcm9tICJPYnNlcnZhdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnTGFib3JhdG9yeScKY29kZSAic29jaWFsLWhpc3RvcnkiOiAnc29jaWFsLWhpc3RvcnknIGZyb20gIk9ic2VydmF0aW9uIENhdGVnb3J5IiBkaXNwbGF5ICdTb2NpYWwgSGlzdG9yeScKY29kZSAidml0YWwtc2lnbnMiOiAndml0YWwtc2lnbnMnIGZyb20gIk9ic2VydmF0aW9uIENhdGVnb3J5IiBkaXNwbGF5ICdWaXRhbCBTaWducycKY29kZSAiaW1hZ2luZyI6ICdpbWFnaW5nJyBmcm9tICJPYnNlcnZhdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnSW1hZ2luZycKY29kZSAicHJvY2VkdXJlIjogJ3Byb2NlZHVyZScgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ1Byb2NlZHVyZScKY29kZSAic3VydmV5IjogJ3N1cnZleScgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ1N1cnZleScKCi8vIENvbmRpdGlvbiBjYXRlZ29yeQoKY29kZSAiZW5jb3VudGVyLWRpYWdub3NpcyI6ICdlbmNvdW50ZXItZGlhZ25vc2lzJyBmcm9tICJDb25kaXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ0VuY291bnRlciBEaWFnbm9zaXMnCgovLyBEaWFnbm9zdGljIFJlcG9ydCBDYXRlZ29yeSAoTE9JTkMtYmFzZWQpCgpjb2RlICJSYWRpb2xvZ3kiOiAnTFAyOTY4NC01JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnUmFkaW9sb2d5Jwpjb2RlICJQYXRob2xvZ3kiOiAnTFA3ODM5LTYnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdQYXRob2xvZ3knCmNvZGUgIkNhcmRpb2xvZ3kiOiAnTFAyOTcwOC0yJyBmcm9tICJMT0lOQyIgZGlzcGxheSAnQ2FyZGlvbG9neScKCi8vIEVtZXJnZW5jeSBFbmNvdW50ZXIgQ2xhc3MKCmNvZGUgImVtZXJnZW5jeSI6ICdFTUVSJyBmcm9tICJBY3RDb2RlIiBkaXNwbGF5ICdlbWVyZ2VuY3knCmNvZGUgIm9ic2VydmF0aW9uIGVuY291bnRlciI6ICdPQlNFTkMnIGZyb20gIkFjdENvZGUiIGRpc3BsYXkgJ29ic2VydmF0aW9uIGVuY291bnRlcicKCi8vIENvbmRpdGlvbiBjbGluaWNhbFN0YXR1cwoKY29kZSAiYWN0aXZlIjogJ2FjdGl2ZScgZnJvbSAiQ29uZGl0aW9uIENsaW5pY2FsIFN0YXR1cyIgZGlzcGxheSAnYWN0aXZlJwoKLy8gUHJvY2VkdXJlIGNhdGVnb3J5Cgpjb2RlICJTdXJnaWNhbCBwcm9jZWR1cmUiOiAnMzg3NzEzMDAzJyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnU3VyZ2ljYWwgcHJvY2VkdXJlJwpjb2RlICJEaWFnbm9zdGljIHByb2NlZHVyZSI6ICcxMDM2OTMwMDcnIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdEaWFnbm9zdGljIHByb2NlZHVyZScKCi8vIE1lZGljYXRpb25SZXF1ZXN0IGNhdGVnb3J5Cgpjb2RlICJpbnBhdGllbnQiOiAnaW5wYXRpZW50JyBmcm9tICJNZWRpY2F0aW9uUmVxdWVzdCBDYXRlZ29yeSIgZGlzcGxheSAnSW5wYXRpZW50Jwpjb2RlICJvdXRwYXRpZW50IjogJ291dHBhdGllbnQnIGZyb20gIk1lZGljYXRpb25SZXF1ZXN0IENhdGVnb3J5IiBkaXNwbGF5ICdPdXRwYXRpZW50JwoKLy8gU2VydmljZVJlcXVlc3QgY2F0ZWdvcnkKCmNvZGUgIkxhYm9yYXRvcnkgcHJvY2VkdXJlIjogJzEwODI1MjAwNycgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0xhYm9yYXRvcnkgcHJvY2VkdXJlJwpjb2RlICJJbWFnaW5nIjogJzM2MzY3OTAwNScgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0ltYWdpbmcnCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNi0wMi0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50IAoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb3JlIGVuY291bnRlciBsb2dpYwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBFbmNvdW50ZXJzIHdpdGggTkhTTiBjbGFzcyBjb2RlcyAoSU1QLCBBQ1VURSwgTk9OQUMsIFNTKQoKCgoKCmRlZmluZSAiRW5jb3VudGVycyB3aXRoIE5IU04gSW5wYXRpZW50IENsYXNzIjoKICBbRW5jb3VudGVyXSBFbmMKICAgIHdoZXJlIEVuYy5jbGFzcyB+IFVTUXVhbGl0eUNvcmVDb21tb24uImlucGF0aWVudCBlbmNvdW50ZXIiCiAgICAgIG9yIEVuYy5jbGFzcyB+IFVTUXVhbGl0eUNvcmVDb21tb24uImlucGF0aWVudCBhY3V0ZSIKICAgICAgb3IgRW5jLmNsYXNzIH4gVVNRdWFsaXR5Q29yZUNvbW1vbi4iaW5wYXRpZW50IG5vbi1hY3V0ZSIKICAgICAgb3IgRW5jLmNsYXNzIH4gVVNRdWFsaXR5Q29yZUNvbW1vbi4ic2hvcnQgc3RheSIKCmRlZmluZSAiUXVhbGlmeWluZyBFbmNvdW50ZXJzIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogICggW0VuY291bnRlcjogIkVuY291bnRlciBJbnBhdGllbnQiXQogICAgdW5pb24gW0VuY291bnRlcjogIkVtZXJnZW5jeSBEZXBhcnRtZW50IFZpc2l0Il0KICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJPYnNlcnZhdGlvbiBTZXJ2aWNlcyJdCiAgICB1bmlvbiAiRW5jb3VudGVycyB3aXRoIE5IU04gSW5wYXRpZW50IENsYXNzIgogICAgdW5pb24gW0VuY291bnRlcjogY2xhc3MgfiAiZW1lcmdlbmN5Il0KICAgIHVuaW9uIFtFbmNvdW50ZXI6IGNsYXNzIH4gIm9ic2VydmF0aW9uIGVuY291bnRlciJdICkgUXVhbGlmeWluZ0VuY291bnRlcnMKICAgIHdoZXJlIFF1YWxpZnlpbmdFbmNvdW50ZXJzLnN0YXR1cyBpbiB7ICdpbi1wcm9ncmVzcycsICdmaW5pc2hlZCcsICd0cmlhZ2VkJywgJ29ubGVhdmUnLCAnZW50ZXJlZC1pbi1lcnJvcicgfQogICAgICBhbmQgUXVhbGlmeWluZ0VuY291bnRlcnMucGVyaW9kIG92ZXJsYXBzICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkVuY291bnRlcnMiOgogIFtFbmNvdW50ZXJdCgpkZWZpbmUgIkVuY291bnRlcnMgd2l0aCBQYXRpZW50IEhvc3BpdGFsIExvY2F0aW9ucyI6CiAgIkVuY291bnRlcnMiIEVucwogICAgd2hlcmUgZXhpc3RzICggRW5zLmxvY2F0aW9uIEVuY291bnRlckxvY2F0aW9uCiAgICAgICAgd2hlcmUgRW5jb3VudGVyTG9jYXRpb24ucGVyaW9kIG92ZXJsYXBzIEVucy5wZXJpb2QKICAgICAgICAgIGFuZCBFbmNvdW50ZXJMb2NhdGlvbi5sb2NhdGlvbi5nZXRMb2NhdGlvbiAoICkudHlwZSBpbiAiSW5wYXRpZW50LCBFbWVyZ2VuY3ksIGFuZCBPYnNlcnZhdGlvbiBMb2NhdGlvbnMiCiAgICApCiAgICAgIGFuZCBFbnMuc3RhdHVzIGluIHsgJ2luLXByb2dyZXNzJywgJ2ZpbmlzaGVkJywgJ3RyaWFnZWQnLCAnb25sZWF2ZScsICdlbnRlcmVkLWluLWVycm9yJyB9CiAgICAgIGFuZCBFbnMucGVyaW9kIG92ZXJsYXBzICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgIlF1YWxpZnlpbmcgRW5jb3VudGVycyBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgdW5pb24gIkVuY291bnRlcnMgd2l0aCBQYXRpZW50IEhvc3BpdGFsIExvY2F0aW9ucyIKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29yZSByZXRyaWV2ZXMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gTG9jYXRpb25zIGZyb20gSVAgZW5jb3VudGVycwoKCgoKCmRlZmluZSAiR2V0IExvY2F0aW9ucyBmcm9tIElQIEVuY291bnRlcnMgaW4gTWVhc3VyZW1lbnQgUGVyaW9kIjoKICBmbGF0dGVuICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgbGV0IGxvY2F0aW9uRWxlbWVudHM6IElQLmxvY2F0aW9uCiAgICAgIHJldHVybiBsb2NhdGlvbkVsZW1lbnRzIExFCiAgICAgICAgbGV0IGxvY2F0aW9uUmVmZXJlbmNlOiBMRS5sb2NhdGlvbgogICAgICAgIHJldHVybiBsb2NhdGlvblJlZmVyZW5jZS5nZXRMb2NhdGlvbiAoICkKICApCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFNERXMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgoKZGVmaW5lICJTREUgQ29uZGl0aW9uIFByb2JsZW1zIEhlYWx0aENvbmNlcm5zIjoKICBbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuc10gRGlhZ25vc2lzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlIERpYWdub3Npcy5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGRheSBvZiBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBEaWFnbm9zaXMuaWQsCiAgICAgIG1ldGE6IERpYWdub3Npcy5tZXRhLAogICAgICBzdGF0dXM6IERpYWdub3Npcy5jbGluaWNhbFN0YXR1cywKICAgICAgdmVyaWZpY2F0aW9uU3RhdHVzOiBEaWFnbm9zaXMudmVyaWZpY2F0aW9uU3RhdHVzLAogICAgICBjYXRlZ29yeTogRGlhZ25vc2lzLmNhdGVnb3J5LAogICAgICBzZXZlcml0eTogRGlhZ25vc2lzLnNldmVyaXR5LAogICAgICBjb2RlOiBEaWFnbm9zaXMuY29kZSwKICAgICAgYm9keVNpdGU6IERpYWdub3Npcy5ib2R5U2l0ZSwKICAgICAgc3ViamVjdDogRGlhZ25vc2lzLnN1YmplY3QsCiAgICAgIGVuY291bnRlclJlZmVyZW5jZUlkOiBEaWFnbm9zaXMuZW5jb3VudGVyLnJlZmVyZW5jZS5nZXRJZCAoICksCiAgICAgIG9uc2V0OiBEaWFnbm9zaXMub25zZXQsCiAgICAgIHN0YWdlOiBEaWFnbm9zaXMuc3RhZ2UsCiAgICAgIGV2aWRlbmNlOiBEaWFnbm9zaXMuZXZpZGVuY2UsCiAgICAgIG5vdGU6IERpYWdub3Npcy5ub3RlCiAgICB9CgpkZWZpbmUgIlNERSBDb25kaXRpb24gRGlhZ25vc2lzIjoKICBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzXSBEaWFnbm9zaXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgRGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgZGF5IG9mIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IERpYWdub3Npcy5pZCwKICAgICAgbWV0YTogRGlhZ25vc2lzLm1ldGEsCiAgICAgIHN0YXR1czogRGlhZ25vc2lzLmNsaW5pY2FsU3RhdHVzLAogICAgICB2ZXJpZmljYXRpb25TdGF0dXM6IERpYWdub3Npcy52ZXJpZmljYXRpb25TdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBEaWFnbm9zaXMuY2F0ZWdvcnksCiAgICAgIHNldmVyaXR5OiBEaWFnbm9zaXMuc2V2ZXJpdHksCiAgICAgIGNvZGU6IERpYWdub3Npcy5jb2RlLAogICAgICBib2R5U2l0ZTogRGlhZ25vc2lzLmJvZHlTaXRlLAogICAgICBzdWJqZWN0OiBEaWFnbm9zaXMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyUmVmZXJlbmNlSWQ6IERpYWdub3Npcy5lbmNvdW50ZXIucmVmZXJlbmNlLmdldElkICggKSwKICAgICAgb25zZXQ6IERpYWdub3Npcy5vbnNldCwKICAgICAgc3RhZ2U6IERpYWdub3Npcy5zdGFnZSwKICAgICAgZXZpZGVuY2U6IERpYWdub3Npcy5ldmlkZW5jZSwKICAgICAgbm90ZTogRGlhZ25vc2lzLm5vdGUKICAgIH0KCi8vIENvdmVyYWdlIFNERSDigJMgdHVwbGVzIG9mIENvdmVyYWdlIGRhdGEKCgpkZWZpbmUgIlNERSBDb3ZlcmFnZSI6CiAgW0NvdmVyYWdlXSBDb3ZlcmFnZXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgQ292ZXJhZ2VzLnBlcmlvZCBvdmVybGFwcyBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBDb3ZlcmFnZXMuaWQsCiAgICAgIG1ldGE6IENvdmVyYWdlcy5tZXRhLAogICAgICBzdGF0dXM6IENvdmVyYWdlcy5zdGF0dXMsCiAgICAgIHR5cGU6IENvdmVyYWdlcy50eXBlLAogICAgICBwb2xpY3lIb2xkZXI6IENvdmVyYWdlcy5wb2xpY3lIb2xkZXIsCiAgICAgIHN1YnNjcmliZXI6IENvdmVyYWdlcy5zdWJzY3JpYmVyLAogICAgICBzdWJzY3JpYmVySWQ6IENvdmVyYWdlcy5zdWJzY3JpYmVySWQsCiAgICAgIGJlbmVmaWNpYXJ5OiBDb3ZlcmFnZXMuYmVuZWZpY2lhcnksCiAgICAgIGRlcGVuZGVudDogQ292ZXJhZ2VzLmRlcGVuZGVudCwKICAgICAgcmVsYXRpb25zaGlwOiBDb3ZlcmFnZXMucmVsYXRpb25zaGlwLAogICAgICBwZXJpb2Q6IENvdmVyYWdlcy5wZXJpb2QsCiAgICAgIHBheW9yOiBDb3ZlcmFnZXMucGF5b3IsCiAgICAgIGNsYXNzOiBDb3ZlcmFnZXMuY2xhc3MsCiAgICAgIG9yZGVyOiBDb3ZlcmFnZXMub3JkZXIsCiAgICAgIG5ldHdvcms6IENvdmVyYWdlcy5uZXR3b3JrLAogICAgICBzdWJyb2dhdGlvbjogQ292ZXJhZ2VzLnN1YnJvZ2F0aW9uLAogICAgICBjb250cmFjdDogQ292ZXJhZ2VzLmNvbnRyYWN0CiAgICB9CgovLyBEZXZpY2UgU0RFIOKAkyB0dXBsZXMgb2YgRGV2aWNlIGRhdGEKCgpkZWZpbmUgIlNERSBEZXZpY2UiOgogIFtEZXZpY2VdIERldmljZXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBEZXZpY2VzLmlkLAogICAgICBtZXRhOiBEZXZpY2VzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogRGV2aWNlcy5leHRlbnNpb24sCiAgICAgIHN0YXR1czogRGV2aWNlcy5zdGF0dXMsCiAgICAgIGV4cGlyYXRpb25EYXRlOiBEZXZpY2VzLmV4cGlyYXRpb25EYXRlLAogICAgICBsb3ROdW1iZXI6IERldmljZXMubG90TnVtYmVyLAogICAgICBzZXJpYWxOdW1iZXI6IERldmljZXMuc2VyaWFsTnVtYmVyLAogICAgICBtb2RlbE51bWJlcjogRGV2aWNlcy5tb2RlbE51bWJlciwKICAgICAgcGFydE51bWJlcjogRGV2aWNlcy5wYXJ0TnVtYmVyLAogICAgICB0eXBlOiBEZXZpY2VzLnR5cGUsCiAgICAgIHBhdGllbnQ6IERldmljZXMucGF0aWVudCwKICAgICAgcGFyZW50OiBEZXZpY2VzLnBhcmVudAogICAgfQoKLy8gRGlhZ25vc3RpY1JlcG9ydCBTREVzCgoKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBMYWIiOgogIFtEaWFnbm9zdGljUmVwb3J0TGFiXSBkcgogICAgd2hlcmUgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICB3aGVyZSAiTm9ybWFsaXplIEludGVydmFsIihkci5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQoKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBOb3RlIjoKICBbRGlhZ25vc3RpY1JlcG9ydE5vdGVdIGRyCiAgICB3aGVyZSAoIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJSYWRpb2xvZ3kiCiAgICAgICkKICAgICAgICBvciBleGlzdHMgKCBkci5jYXRlZ29yeSBDYXRlZ29yeQogICAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJQYXRob2xvZ3kiCiAgICAgICAgKQogICAgICAgIG9yIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICAgIHdoZXJlIENhdGVnb3J5IH4gIkNhcmRpb2xvZ3kiCiAgICAgICAgKQogICAgKQogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKGRyLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBkci5pZCwKICAgICAgbWV0YTogZHIubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBkci5leHRlbnNpb24sCiAgICAgIGJhc2VkT246IGRyLmJhc2VkT24sCiAgICAgIHN0YXR1czogZHIuc3RhdHVzLAogICAgICBjYXRlZ29yeTogZHIuY2F0ZWdvcnksCiAgICAgIGNvZGU6IGRyLmNvZGUsCiAgICAgIHN1YmplY3Q6IGRyLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogZHIuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IGRyLmVmZmVjdGl2ZSwKICAgICAgaXNzdWVkOiBkci5pc3N1ZWQsCiAgICAgIHNwZWNpbWVuOiBkci5zcGVjaW1lbiwKICAgICAgcmVzdWx0OiBkci5yZXN1bHQsCiAgICAgIGNvbmNsdXNpb246IGRyLmNvbmNsdXNpb24sCiAgICAgIGNvbmNsdXNpb25Db2RlOiBkci5jb25jbHVzaW9uQ29kZQogICAgfQoKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBPdGhlcnMiOgogIFtEaWFnbm9zdGljUmVwb3J0Tm90ZV0gZHIKICAgIHdoZXJlIG5vdCAoIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJSYWRpb2xvZ3kiCiAgICAgICkKICAgICAgICBvciBleGlzdHMgKCBkci5jYXRlZ29yeSBDYXRlZ29yeQogICAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJQYXRob2xvZ3kiCiAgICAgICAgKQogICAgICAgIG9yIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICAgIHdoZXJlIENhdGVnb3J5IH4gIkNhcmRpb2xvZ3kiCiAgICAgICAgKQogICAgKQogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKGRyLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBkci5pZCwKICAgICAgbWV0YTogZHIubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBkci5leHRlbnNpb24sCiAgICAgIGJhc2VkT246IGRyLmJhc2VkT24sCiAgICAgIHN0YXR1czogZHIuc3RhdHVzLAogICAgICBjYXRlZ29yeTogZHIuY2F0ZWdvcnksCiAgICAgIGNvZGU6IGRyLmNvZGUsCiAgICAgIHN1YmplY3Q6IGRyLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogZHIuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IGRyLmVmZmVjdGl2ZSwKICAgICAgaXNzdWVkOiBkci5pc3N1ZWQsCiAgICAgIHNwZWNpbWVuOiBkci5zcGVjaW1lbiwKICAgICAgcmVzdWx0OiBkci5yZXN1bHQsCiAgICAgIGNvbmNsdXNpb246IGRyLmNvbmNsdXNpb24sCiAgICAgIGNvbmNsdXNpb25Db2RlOiBkci5jb25jbHVzaW9uQ29kZQogICAgfQoKLy8gRW5jb3VudGVyIFNERXMKCgpkZWZpbmUgIlNERSBFbmNvdW50ZXIiOgogICJFbmNvdW50ZXJzIiBFbnMKICAgIHdoZXJlIG5vdCAiQ2hlY2tJUCIoRW5zKQogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlIEVucy5wZXJpb2Qgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBFbnMuaWQsCiAgICAgIG1ldGE6IEVucy5tZXRhLAogICAgICBpZGVudGlmaWVyOiBFbnMuaWRlbnRpZmllciwKICAgICAgc3RhdHVzOiBFbnMuc3RhdHVzLAogICAgICBzdGF0dXNIaXN0b3J5OiBFbnMuc3RhdHVzSGlzdG9yeSwKICAgICAgY2xhc3M6IEVucy5jbGFzcywKICAgICAgY2xhc3NIaXN0b3J5OiBFbnMuY2xhc3NIaXN0b3J5LAogICAgICB0eXBlOiBFbnMudHlwZSwKICAgICAgc2VydmljZVR5cGU6IEVucy5zZXJ2aWNlVHlwZSwKICAgICAgcHJpb3JpdHk6IEVucy5wcmlvcml0eSwKICAgICAgc3ViamVjdDogRW5zLnN1YmplY3QsCiAgICAgIHBlcmlvZDogRW5zLnBlcmlvZCwKICAgICAgbGVuZ3RoOiBFbnMubGVuZ3RoLAogICAgICByZWFzb25Db2RlOiBFbnMucmVhc29uQ29kZSwKICAgICAgcmVhc29uUmVmZXJlbmNlOiBFbnMucmVhc29uUmVmZXJlbmNlLAogICAgICBkaWFnbm9zaXM6IEVucy5kaWFnbm9zaXMsCiAgICAgIGFjY291bnQ6IEVucy5hY2NvdW50LAogICAgICBob3NwaXRhbGl6YXRpb246IEVucy5ob3NwaXRhbGl6YXRpb24sCiAgICAgIGxvY2F0aW9uOiBFbnMubG9jYXRpb24sCiAgICAgIHBhcnRPZjogRW5zLnBhcnRPZgogICAgfQoKZGVmaW5lICJTREUgSVAgRW5jb3VudGVycyI6CiAgIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgIHJldHVybiB7CiAgICAgIGlkOiBJUC5pZCwKICAgICAgbWV0YTogSVAubWV0YSwKICAgICAgaWRlbnRpZmllcjogSVAuaWRlbnRpZmllciwKICAgICAgc3RhdHVzOiBJUC5zdGF0dXMsCiAgICAgIHN0YXR1c0hpc3Rvcnk6IElQLnN0YXR1c0hpc3RvcnksCiAgICAgIGNsYXNzOiBJUC5jbGFzcywKICAgICAgY2xhc3NIaXN0b3J5OiBJUC5jbGFzc0hpc3RvcnksCiAgICAgIHR5cGU6IElQLnR5cGUsCiAgICAgIHNlcnZpY2VUeXBlOiBJUC5zZXJ2aWNlVHlwZSwKICAgICAgcHJpb3JpdHk6IElQLnByaW9yaXR5LAogICAgICBzdWJqZWN0OiBJUC5zdWJqZWN0LAogICAgICBwZXJpb2Q6IElQLnBlcmlvZCwKICAgICAgbGVuZ3RoOiBJUC5sZW5ndGgsCiAgICAgIHJlYXNvbkNvZGU6IElQLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogSVAucmVhc29uUmVmZXJlbmNlLAogICAgICBkaWFnbm9zaXM6IElQLmRpYWdub3NpcywKICAgICAgYWNjb3VudDogSVAuYWNjb3VudCwKICAgICAgaG9zcGl0YWxpemF0aW9uOiBJUC5ob3NwaXRhbGl6YXRpb24sCiAgICAgIGxvY2F0aW9uOiBJUC5sb2NhdGlvbiwKICAgICAgcGFydE9mOiBJUC5wYXJ0T2YKICAgIH0KCi8vIExvY2F0aW9uIFNERQoKCmRlZmluZSAiU0RFIExvY2F0aW9uIjoKICAiR2V0IExvY2F0aW9ucyBmcm9tIElQIEVuY291bnRlcnMgaW4gTWVhc3VyZW1lbnQgUGVyaW9kIiBMb2NhdGlvbnMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iICkKICAgICAgYW5kIExvY2F0aW9ucyBpcyBub3QgbnVsbAogICAgcmV0dXJuIHsKICAgICAgaWQ6IExvY2F0aW9ucy5pZCwKICAgICAgbWV0YTogTG9jYXRpb25zLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogTG9jYXRpb25zLmV4dGVuc2lvbiwKICAgICAgc3RhdHVzOiBMb2NhdGlvbnMuc3RhdHVzLAogICAgICBvcGVyYXRpb25hbFN0YXR1czogTG9jYXRpb25zLm9wZXJhdGlvbmFsU3RhdHVzLAogICAgICBuYW1lOiBMb2NhdGlvbnMubmFtZSwKICAgICAgYWxpYXM6IExvY2F0aW9ucy5hbGlhcywKICAgICAgZGVzY3JpcHRpb246IExvY2F0aW9ucy5kZXNjcmlwdGlvbiwKICAgICAgbW9kZTogTG9jYXRpb25zLm1vZGUsCiAgICAgIHR5cGU6IExvY2F0aW9ucy50eXBlLAogICAgICB0ZWxlY29tOiBMb2NhdGlvbnMudGVsZWNvbSwKICAgICAgYWRkcmVzczogTG9jYXRpb25zLmFkZHJlc3MsCiAgICAgIHBoeXNpY2FsVHlwZTogTG9jYXRpb25zLnBoeXNpY2FsVHlwZSwKICAgICAgcG9zaXRpb246IExvY2F0aW9ucy5wb3NpdGlvbiwKICAgICAgbWFuYWdpbmdPcmdhbml6YXRpb246IExvY2F0aW9ucy5tYW5hZ2luZ09yZ2FuaXphdGlvbiwKICAgICAgcGFydE9mOiBMb2NhdGlvbnMucGFydE9mLAogICAgICBob3Vyc09mT3BlcmF0aW9uOiBMb2NhdGlvbnMuaG91cnNPZk9wZXJhdGlvbiwKICAgICAgYXZhaWxhYmlsaXR5RXhjZXB0aW9uczogTG9jYXRpb25zLmF2YWlsYWJpbGl0eUV4Y2VwdGlvbnMsCiAgICAgIGVuZHBvaW50OiBMb2NhdGlvbnMuZW5kcG9pbnQKICAgIH0KCi8vIE1lZGljYXRpb24gU0RFcwoKCmRlZmluZSAiU0RFIE1lZGljYXRpb24gQWRtaW5pc3RyYXRpb24iOgogICJTREUgTWVkaWNhdGlvbiBBZG1pbmlzdHJhdGlvbiBCYXNlIgogICAgdW5pb24gIlNERSBNZWRpY2F0aW9uIEFkbWluaXN0cmF0aW9uIE5vdCBEb25lIgoKZGVmaW5lICJTREUgTWVkaWNhdGlvbiBBZG1pbmlzdHJhdGlvbiBCYXNlIjoKICBbTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uXSBNZWRBZG1pbmlzdHJhdGlvbnMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgIk5vcm1hbGl6ZSBJbnRlcnZhbCIoTWVkQWRtaW5pc3RyYXRpb25zLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogTWVkQWRtaW5pc3RyYXRpb25zLmlkLAogICAgICBtZXRhOiBNZWRBZG1pbmlzdHJhdGlvbnMubWV0YSwKICAgICAgaW5zdGFudGlhdGVzOiBNZWRBZG1pbmlzdHJhdGlvbnMuaW5zdGFudGlhdGVzLAogICAgICBwYXJ0T2Y6IE1lZEFkbWluaXN0cmF0aW9ucy5wYXJ0T2YsCiAgICAgIHN0YXR1czogTWVkQWRtaW5pc3RyYXRpb25zLnN0YXR1cywKICAgICAgc3RhdHVzUmVhc29uOiBNZWRBZG1pbmlzdHJhdGlvbnMuc3RhdHVzUmVhc29uLAogICAgICBjYXRlZ29yeTogTWVkQWRtaW5pc3RyYXRpb25zLmNhdGVnb3J5LAogICAgICBtZWRpY2F0aW9uOiBNZWRBZG1pbmlzdHJhdGlvbnMubWVkaWNhdGlvbiwKICAgICAgc3ViamVjdDogTWVkQWRtaW5pc3RyYXRpb25zLnN1YmplY3QsCiAgICAgIGNvbnRleHQ6IE1lZEFkbWluaXN0cmF0aW9ucy5jb250ZXh0LAogICAgICBzdXBwb3J0aW5nSW5mb3JtYXRpb246IE1lZEFkbWluaXN0cmF0aW9ucy5zdXBwb3J0aW5nSW5mb3JtYXRpb24sCiAgICAgIGVmZmVjdGl2ZTogTWVkQWRtaW5pc3RyYXRpb25zLmVmZmVjdGl2ZSwKICAgICAgcGVyZm9ybWVyOiBNZWRBZG1pbmlzdHJhdGlvbnMucGVyZm9ybWVyLAogICAgICByZWFzb25Db2RlOiBNZWRBZG1pbmlzdHJhdGlvbnMucmVhc29uQ29kZSwKICAgICAgcmVhc29uUmVmZXJlbmNlOiBNZWRBZG1pbmlzdHJhdGlvbnMucmVhc29uUmVmZXJlbmNlLAogICAgICByZXF1ZXN0OiBNZWRBZG1pbmlzdHJhdGlvbnMucmVxdWVzdCwKICAgICAgZGV2aWNlOiBNZWRBZG1pbmlzdHJhdGlvbnMuZGV2aWNlLAogICAgICBub3RlOiBNZWRBZG1pbmlzdHJhdGlvbnMubm90ZSwKICAgICAgZG9zYWdlOiBNZWRBZG1pbmlzdHJhdGlvbnMuZG9zYWdlCiAgICB9CgpkZWZpbmUgIlNERSBNZWRpY2F0aW9uIEFkbWluaXN0cmF0aW9uIE5vdCBEb25lIjoKICBbTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uTm90RG9uZV0gTWVkQWRtaW5pc3RyYXRpb25zCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKE1lZEFkbWluaXN0cmF0aW9ucy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE1lZEFkbWluaXN0cmF0aW9ucy5pZCwKICAgICAgbWV0YTogTWVkQWRtaW5pc3RyYXRpb25zLm1ldGEsCiAgICAgIGluc3RhbnRpYXRlczogTWVkQWRtaW5pc3RyYXRpb25zLmluc3RhbnRpYXRlcywKICAgICAgcGFydE9mOiBNZWRBZG1pbmlzdHJhdGlvbnMucGFydE9mLAogICAgICBzdGF0dXM6IE1lZEFkbWluaXN0cmF0aW9ucy5zdGF0dXMsCiAgICAgIHN0YXR1c1JlYXNvbjogTWVkQWRtaW5pc3RyYXRpb25zLnN0YXR1c1JlYXNvbiwKICAgICAgY2F0ZWdvcnk6IE1lZEFkbWluaXN0cmF0aW9ucy5jYXRlZ29yeSwKICAgICAgbWVkaWNhdGlvbjogTWVkQWRtaW5pc3RyYXRpb25zLm1lZGljYXRpb24sCiAgICAgIHN1YmplY3Q6IE1lZEFkbWluaXN0cmF0aW9ucy5zdWJqZWN0LAogICAgICBjb250ZXh0OiBNZWRBZG1pbmlzdHJhdGlvbnMuY29udGV4dCwKICAgICAgc3VwcG9ydGluZ0luZm9ybWF0aW9uOiBNZWRBZG1pbmlzdHJhdGlvbnMuc3VwcG9ydGluZ0luZm9ybWF0aW9uLAogICAgICBlZmZlY3RpdmU6IE1lZEFkbWluaXN0cmF0aW9ucy5lZmZlY3RpdmUsCiAgICAgIHBlcmZvcm1lcjogTWVkQWRtaW5pc3RyYXRpb25zLnBlcmZvcm1lciwKICAgICAgcmVhc29uQ29kZTogTWVkQWRtaW5pc3RyYXRpb25zLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogTWVkQWRtaW5pc3RyYXRpb25zLnJlYXNvblJlZmVyZW5jZSwKICAgICAgcmVxdWVzdDogTWVkQWRtaW5pc3RyYXRpb25zLnJlcXVlc3QsCiAgICAgIGRldmljZTogTWVkQWRtaW5pc3RyYXRpb25zLmRldmljZSwKICAgICAgbm90ZTogTWVkQWRtaW5pc3RyYXRpb25zLm5vdGUsCiAgICAgIGRvc2FnZTogTWVkQWRtaW5pc3RyYXRpb25zLmRvc2FnZQogICAgfQoKLy8gU0RFIE1lZGljYXRpb24gUmVxdWVzdCAtIHJlZ3VsYXIgcmVxdWVzdHMgKGRvTm90UGVyZm9ybSBpcyBmYWxzZSBvciBhYnNlbnQpCgoKZGVmaW5lICJTREUgTWVkaWNhdGlvbiBSZXF1ZXN0IEJhc2UiOgogIFtNZWRpY2F0aW9uUmVxdWVzdF0gTWVkUmVxdWVzdHMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgTWVkUmVxdWVzdHMuYXV0aG9yZWRPbiBkdXJpbmcgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogTWVkUmVxdWVzdHMuaWQsCiAgICAgIG1ldGE6IE1lZFJlcXVlc3RzLm1ldGEsCiAgICAgIHN0YXR1czogTWVkUmVxdWVzdHMuc3RhdHVzLAogICAgICBzdGF0dXNSZWFzb246IE1lZFJlcXVlc3RzLnN0YXR1c1JlYXNvbiwKICAgICAgaW50ZW50OiBNZWRSZXF1ZXN0cy5pbnRlbnQsCiAgICAgIGNhdGVnb3J5OiBNZWRSZXF1ZXN0cy5jYXRlZ29yeSwKICAgICAgcHJpb3JpdHk6IE1lZFJlcXVlc3RzLnByaW9yaXR5LAogICAgICAvL2RvTm90UGVyZm9ybTogTWVkUmVxdWVzdHMuZG9Ob3RQZXJmb3JtLAogICAgICAKICAgICAgcmVwb3J0ZWQ6IE1lZFJlcXVlc3RzLnJlcG9ydGVkLAogICAgICBtZWRpY2F0aW9uOiBNZWRSZXF1ZXN0cy5tZWRpY2F0aW9uLAogICAgICBzdWJqZWN0OiBNZWRSZXF1ZXN0cy5zdWJqZWN0LAogICAgICBlbmNvdW50ZXI6IE1lZFJlcXVlc3RzLmVuY291bnRlciwKICAgICAgYXV0aG9yZWRPbjogTWVkUmVxdWVzdHMuYXV0aG9yZWRPbiwKICAgICAgcmVxdWVzdGVyOiBNZWRSZXF1ZXN0cy5yZXF1ZXN0ZXIsCiAgICAgIHJlY29yZGVyOiBNZWRSZXF1ZXN0cy5yZWNvcmRlciwKICAgICAgcmVhc29uQ29kZTogTWVkUmVxdWVzdHMucmVhc29uQ29kZSwKICAgICAgcmVhc29uUmVmZXJlbmNlOiBNZWRSZXF1ZXN0cy5yZWFzb25SZWZlcmVuY2UsCiAgICAgIGluc3RhbnRpYXRlc0Nhbm9uaWNhbDogTWVkUmVxdWVzdHMuaW5zdGFudGlhdGVzQ2Fub25pY2FsLAogICAgICBpbnN0YW50aWF0ZXNVcmk6IE1lZFJlcXVlc3RzLmluc3RhbnRpYXRlc1VyaSwKICAgICAgY291cnNlT2ZUaGVyYXB5VHlwZTogTWVkUmVxdWVzdHMuY291cnNlT2ZUaGVyYXB5VHlwZSwKICAgICAgZG9zYWdlSW5zdHJ1Y3Rpb246IE1lZFJlcXVlc3RzLmRvc2FnZUluc3RydWN0aW9uCiAgICB9CgovLyBTREUgTWVkaWNhdGlvbiBOb3QgUmVxdWVzdGVkIC0gbmVnYXRpb24gcmVxdWVzdHMgKGRvTm90UGVyZm9ybSBpcyB0cnVlKQoKCmRlZmluZSAiU0RFIE1lZGljYXRpb24gTm90IFJlcXVlc3RlZCI6CiAgW01lZGljYXRpb25Ob3RSZXF1ZXN0ZWRdIE1lZE5vdFJlcXVlc3RzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlIE1lZE5vdFJlcXVlc3RzLmF1dGhvcmVkT24gZHVyaW5nIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE1lZE5vdFJlcXVlc3RzLmlkLAogICAgICBtZXRhOiBNZWROb3RSZXF1ZXN0cy5tZXRhLAogICAgICBzdGF0dXM6IE1lZE5vdFJlcXVlc3RzLnN0YXR1cywKICAgICAgc3RhdHVzUmVhc29uOiBNZWROb3RSZXF1ZXN0cy5zdGF0dXNSZWFzb24sCiAgICAgIGludGVudDogTWVkTm90UmVxdWVzdHMuaW50ZW50LAogICAgICBjYXRlZ29yeTogTWVkTm90UmVxdWVzdHMuY2F0ZWdvcnksCiAgICAgIHByaW9yaXR5OiBNZWROb3RSZXF1ZXN0cy5wcmlvcml0eSwKICAgICAgZG9Ob3RQZXJmb3JtOiBNZWROb3RSZXF1ZXN0cy5kb05vdFBlcmZvcm0sCiAgICAgIHJlcG9ydGVkOiBNZWROb3RSZXF1ZXN0cy5yZXBvcnRlZCwKICAgICAgbWVkaWNhdGlvbjogTWVkTm90UmVxdWVzdHMubWVkaWNhdGlvbiwKICAgICAgc3ViamVjdDogTWVkTm90UmVxdWVzdHMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBNZWROb3RSZXF1ZXN0cy5lbmNvdW50ZXIsCiAgICAgIGF1dGhvcmVkT246IE1lZE5vdFJlcXVlc3RzLmF1dGhvcmVkT24sCiAgICAgIHJlcXVlc3RlcjogTWVkTm90UmVxdWVzdHMucmVxdWVzdGVyLAogICAgICByZWNvcmRlcjogTWVkTm90UmVxdWVzdHMucmVjb3JkZXIsCiAgICAgIHJlYXNvbkNvZGU6IE1lZE5vdFJlcXVlc3RzLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogTWVkTm90UmVxdWVzdHMucmVhc29uUmVmZXJlbmNlLAogICAgICBpbnN0YW50aWF0ZXNDYW5vbmljYWw6IE1lZE5vdFJlcXVlc3RzLmluc3RhbnRpYXRlc0Nhbm9uaWNhbCwKICAgICAgaW5zdGFudGlhdGVzVXJpOiBNZWROb3RSZXF1ZXN0cy5pbnN0YW50aWF0ZXNVcmksCiAgICAgIGNvdXJzZU9mVGhlcmFweVR5cGU6IE1lZE5vdFJlcXVlc3RzLmNvdXJzZU9mVGhlcmFweVR5cGUsCiAgICAgIGRvc2FnZUluc3RydWN0aW9uOiBNZWROb3RSZXF1ZXN0cy5kb3NhZ2VJbnN0cnVjdGlvbgogICAgfQoKLy8gQ29tYmluZWQgU0RFIGZvciBhbGwgTWVkaWNhdGlvbiBSZXF1ZXN0cyAoYm90aCByZWd1bGFyIGFuZCBuZWdhdGlvbikKCgpkZWZpbmUgIlNERSBNZWRpY2F0aW9uIFJlcXVlc3QiOgogICJTREUgTWVkaWNhdGlvbiBSZXF1ZXN0IEJhc2UiCiAgICB1bmlvbiAiU0RFIE1lZGljYXRpb24gTm90IFJlcXVlc3RlZCIKCmRlZmluZSBmdW5jdGlvbiAiR2V0TWVkaWNhdGlvbiIocmVmZXJlbmNlIFJlZmVyZW5jZSk6CiAgc2luZ2xldG9uIGZyb20gKCBbTWVkaWNhdGlvbl0gTWVkaWNhdGlvbgogICAgICB3aGVyZSByZWZlcmVuY2UucmVmZXJlbmNlcyAoIE1lZGljYXRpb24gKQogICkKCmRlZmluZSAiU0RFIE1lZGljYXRpb24iOgogICggW01lZGljYXRpb25SZXF1ZXN0XQogICAgdW5pb24gW01lZGljYXRpb25BZG1pbmlzdHJhdGlvbl0gKSBNZWRSZXFPckFkbWluCiAgICBsZXQgbWVkaWNhdGlvbjogR2V0TWVkaWNhdGlvbihNZWRSZXFPckFkbWluLm1lZGljYXRpb24gYXMgUmVmZXJlbmNlKQogICAgd2hlcmUgbWVkaWNhdGlvbiBpcyBub3QgbnVsbAogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlIENvYWxlc2NlKCJOb3JtYWxpemUgSW50ZXJ2YWwiKE1lZFJlcU9yQWRtaW4uZWZmZWN0aXZlKSwgTWVkUmVxT3JBZG1pbi5hdXRob3JlZE9uLnRvSW50ZXJ2YWwoKSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBtZWRpY2F0aW9uLmlkLAogICAgICBtZXRhOiBtZWRpY2F0aW9uLm1ldGEsCiAgICAgIGNvZGU6IG1lZGljYXRpb24uY29kZSwKICAgICAgc3RhdHVzOiBtZWRpY2F0aW9uLnN0YXR1cywKICAgICAgbWFudWZhY3R1cmVyOiBtZWRpY2F0aW9uLm1hbnVmYWN0dXJlciwKICAgICAgZm9ybTogbWVkaWNhdGlvbi5mb3JtLAogICAgICBhbW91bnQ6IG1lZGljYXRpb24uYW1vdW50LAogICAgICBpbmdyZWRpZW50OiBtZWRpY2F0aW9uLmluZ3JlZGllbnQsCiAgICAgIGJhdGNoOiBtZWRpY2F0aW9uLmJhdGNoCiAgICB9CgoKLy8gT2JzZXJ2YXRpb24gU0RFcwoKCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIExhYiBDYXRlZ29yeSI6CiAgW0xhYm9yYXRvcnlSZXN1bHRPYnNlcnZhdGlvbl0gT2JzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKE9icy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE9icy5pZCwKICAgICAgbWV0YTogT2JzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogT2JzLmV4dGVuc2lvbiwKICAgICAgcGFydE9mOiBPYnMucGFydE9mLAogICAgICBzdGF0dXM6IE9icy5zdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBPYnMuY2F0ZWdvcnksCiAgICAgIGNvZGU6IE9icy5jb2RlLAogICAgICBzdWJqZWN0OiBPYnMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBPYnMuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IE9icy5lZmZlY3RpdmUsCiAgICAgIGlzc3VlZDogT2JzLmlzc3VlZCwKICAgICAgdmFsdWU6IE9icy52YWx1ZSwKICAgICAgZGF0YUFic2VudFJlYXNvbjogT2JzLmRhdGFBYnNlbnRSZWFzb24sCiAgICAgIGludGVycHJldGF0aW9uOiBPYnMuaW50ZXJwcmV0YXRpb24sCiAgICAgIGJvZHlTaXRlOiBPYnMuYm9keVNpdGUsCiAgICAgIG1ldGhvZDogT2JzLm1ldGhvZCwKICAgICAgc3BlY2ltZW46IE9icy5zcGVjaW1lbiwKICAgICAgcmVmZXJlbmNlUmFuZ2U6IE9icy5yZWZlcmVuY2VSYW5nZSwKICAgICAgaGFzTWVtYmVyOiBPYnMuaGFzTWVtYmVyLAogICAgICBkZXJpdmVkRnJvbTogT2JzLmRlcml2ZWRGcm9tLAogICAgICBjb21wb25lbnQ6IE9icy5jb21wb25lbnQKICAgIH0KCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIFNpbXBsZSI6CiAgW1NpbXBsZU9ic2VydmF0aW9uXSBPYnMKICAgIHdoZXJlICggZXhpc3RzICggT2JzLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJzb2NpYWwtaGlzdG9yeSIKICAgICAgKQogICAgICAgIG9yIGV4aXN0cyAoIE9icy5jYXRlZ29yeSBDYXRlZ29yeQogICAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJpbWFnaW5nIgogICAgICAgICkKICAgICAgICBvciBleGlzdHMgKCBPYnMuY2F0ZWdvcnkgQ2F0ZWdvcnkKICAgICAgICAgICAgd2hlcmUgQ2F0ZWdvcnkgfiAicHJvY2VkdXJlIgogICAgICAgICkKICAgICkKICAgICAgYW5kIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgICB3aGVyZSAiTm9ybWFsaXplIEludGVydmFsIihPYnMuZWZmZWN0aXZlKSBvdmVybGFwcyBJUC5wZXJpb2QKICAgICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE9icy5pZCwKICAgICAgbWV0YTogT2JzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogT2JzLmV4dGVuc2lvbiwKICAgICAgcGFydE9mOiBPYnMucGFydE9mLAogICAgICBzdGF0dXM6IE9icy5zdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBPYnMuY2F0ZWdvcnksCiAgICAgIGNvZGU6IE9icy5jb2RlLAogICAgICBzdWJqZWN0OiBPYnMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBPYnMuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IE9icy5lZmZlY3RpdmUsCiAgICAgIGlzc3VlZDogT2JzLmlzc3VlZCwKICAgICAgdmFsdWU6IE9icy52YWx1ZSwKICAgICAgZGF0YUFic2VudFJlYXNvbjogT2JzLmRhdGFBYnNlbnRSZWFzb24sCiAgICAgIGludGVycHJldGF0aW9uOiBPYnMuaW50ZXJwcmV0YXRpb24sCiAgICAgIGJvZHlTaXRlOiBPYnMuYm9keVNpdGUsCiAgICAgIG1ldGhvZDogT2JzLm1ldGhvZCwKICAgICAgc3BlY2ltZW46IE9icy5zcGVjaW1lbiwKICAgICAgcmVmZXJlbmNlUmFuZ2U6IE9icy5yZWZlcmVuY2VSYW5nZSwKICAgICAgaGFzTWVtYmVyOiBPYnMuaGFzTWVtYmVyLAogICAgICBkZXJpdmVkRnJvbTogT2JzLmRlcml2ZWRGcm9tLAogICAgICBjb21wb25lbnQ6IE9icy5jb21wb25lbnQKICAgIH0KICAgIAovLyBTdXJ2ZXkgaXMgZml4ZWQgY2F0ZWdvcnkgY29kZSBpbiBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgcHJvZmlsZSBpbiBRSS1Db3JlICAgIAoKCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIFN1cnZleSI6CiAgW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudF0gT2JzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKE9icy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE9icy5pZCwKICAgICAgbWV0YTogT2JzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogT2JzLmV4dGVuc2lvbiwKICAgICAgcGFydE9mOiBPYnMucGFydE9mLAogICAgICBzdGF0dXM6IE9icy5zdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBPYnMuY2F0ZWdvcnksCiAgICAgIGNvZGU6IE9icy5jb2RlLAogICAgICBzdWJqZWN0OiBPYnMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBPYnMuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IE9icy5lZmZlY3RpdmUsCiAgICAgIGlzc3VlZDogT2JzLmlzc3VlZCwKICAgICAgdmFsdWU6IE9icy52YWx1ZSwKICAgICAgZGF0YUFic2VudFJlYXNvbjogT2JzLmRhdGFBYnNlbnRSZWFzb24sCiAgICAgIGludGVycHJldGF0aW9uOiBPYnMuaW50ZXJwcmV0YXRpb24sCiAgICAgIGJvZHlTaXRlOiBPYnMuYm9keVNpdGUsCiAgICAgIG1ldGhvZDogT2JzLm1ldGhvZCwKICAgICAgc3BlY2ltZW46IE9icy5zcGVjaW1lbiwKICAgICAgcmVmZXJlbmNlUmFuZ2U6IE9icy5yZWZlcmVuY2VSYW5nZSwKICAgICAgaGFzTWVtYmVyOiBPYnMuaGFzTWVtYmVyLAogICAgICBkZXJpdmVkRnJvbTogT2JzLmRlcml2ZWRGcm9tLAogICAgICBjb21wb25lbnQ6IE9icy5jb21wb25lbnQKICAgIH0KCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIFZpdGFsIFNpZ25zIENhdGVnb3J5IjoKICBbVVNDb3JlLlZpdGFsU2lnbnNQcm9maWxlXSBPYnMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgIk5vcm1hbGl6ZSBJbnRlcnZhbCIoT2JzLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogT2JzLmlkLAogICAgICBtZXRhOiBPYnMubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBPYnMuZXh0ZW5zaW9uLAogICAgICBwYXJ0T2Y6IE9icy5wYXJ0T2YsCiAgICAgIHN0YXR1czogT2JzLnN0YXR1cywKICAgICAgY2F0ZWdvcnk6IE9icy5jYXRlZ29yeSwKICAgICAgY29kZTogT2JzLmNvZGUsCiAgICAgIHN1YmplY3Q6IE9icy5zdWJqZWN0LAogICAgICBlbmNvdW50ZXI6IE9icy5lbmNvdW50ZXIsCiAgICAgIGVmZmVjdGl2ZTogT2JzLmVmZmVjdGl2ZSwKICAgICAgaXNzdWVkOiBPYnMuaXNzdWVkLAogICAgICB2YWx1ZTogT2JzLnZhbHVlLAogICAgICBkYXRhQWJzZW50UmVhc29uOiBPYnMuZGF0YUFic2VudFJlYXNvbiwKICAgICAgaW50ZXJwcmV0YXRpb246IE9icy5pbnRlcnByZXRhdGlvbiwKICAgICAgYm9keVNpdGU6IE9icy5ib2R5U2l0ZSwKICAgICAgbWV0aG9kOiBPYnMubWV0aG9kLAogICAgICBzcGVjaW1lbjogT2JzLnNwZWNpbWVuLAogICAgICByZWZlcmVuY2VSYW5nZTogT2JzLnJlZmVyZW5jZVJhbmdlLAogICAgICBoYXNNZW1iZXI6IE9icy5oYXNNZW1iZXIsCiAgICAgIGRlcml2ZWRGcm9tOiBPYnMuZGVyaXZlZEZyb20sCiAgICAgIGNvbXBvbmVudDogT2JzLmNvbXBvbmVudAogICAgfQoKCi8vIFByb2NlZHVyZSBTREUKCgpkZWZpbmUgIlNERSBQcm9jZWR1cmUiOgogIFtQcm9jZWR1cmVdIFByb2NlZHVyZXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgIk5vcm1hbGl6ZSBJbnRlcnZhbCIoUHJvY2VkdXJlcy5wZXJmb3JtZWQpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IFByb2NlZHVyZXMuaWQsCiAgICAgIG1ldGE6IFByb2NlZHVyZXMubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBQcm9jZWR1cmVzLmV4dGVuc2lvbiwKICAgICAgYmFzZWRPbjogUHJvY2VkdXJlcy5iYXNlZE9uLAogICAgICBwYXJ0T2Y6IFByb2NlZHVyZXMucGFydE9mLAogICAgICBzdGF0dXM6IFByb2NlZHVyZXMuc3RhdHVzLAogICAgICBjYXRlZ29yeTogUHJvY2VkdXJlcy5jYXRlZ29yeSwKICAgICAgY29kZTogUHJvY2VkdXJlcy5jb2RlLAogICAgICBzdWJqZWN0OiBQcm9jZWR1cmVzLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogUHJvY2VkdXJlcy5lbmNvdW50ZXIsCiAgICAgIHBlcmZvcm1lZDogUHJvY2VkdXJlcy5wZXJmb3JtZWQsCiAgICAgIGxvY2F0aW9uOiBQcm9jZWR1cmVzLmxvY2F0aW9uLAogICAgICByZWFzb25Db2RlOiBQcm9jZWR1cmVzLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogUHJvY2VkdXJlcy5yZWFzb25SZWZlcmVuY2UsCiAgICAgIGJvZHlTaXRlOiBQcm9jZWR1cmVzLmJvZHlTaXRlCiAgICB9CgovLyBTZXJ2aWNlUmVxdWVzdCBTREUgLSByZWd1bGFyIHJlcXVlc3RzIChkb05vdFBlcmZvcm0gaXMgZmFsc2Ugb3IgYWJzZW50KQoKCmRlZmluZSAiU0RFIFNlcnZpY2UgUmVxdWVzdCBCYXNlIjoKICBbU2VydmljZVJlcXVlc3RdIFNlcnZpY2VSZXF1ZXN0cwogICAgd2hlcmUgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICB3aGVyZSBTZXJ2aWNlUmVxdWVzdHMuYXV0aG9yZWRPbiBkdXJpbmcgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogU2VydmljZVJlcXVlc3RzLmlkLAogICAgICBtZXRhOiBTZXJ2aWNlUmVxdWVzdHMubWV0YSwKICAgICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBTZXJ2aWNlUmVxdWVzdHMuaW5zdGFudGlhdGVzQ2Fub25pY2FsLAogICAgICBpbnN0YW50aWF0ZXNVcmk6IFNlcnZpY2VSZXF1ZXN0cy5pbnN0YW50aWF0ZXNVcmksCiAgICAgIGJhc2VkT246IFNlcnZpY2VSZXF1ZXN0cy5iYXNlZE9uLAogICAgICByZXBsYWNlczogU2VydmljZVJlcXVlc3RzLnJlcGxhY2VzLAogICAgICByZXF1aXNpdGlvbjogU2VydmljZVJlcXVlc3RzLnJlcXVpc2l0aW9uLAogICAgICBzdGF0dXM6IFNlcnZpY2VSZXF1ZXN0cy5zdGF0dXMsCiAgICAgIGludGVudDogU2VydmljZVJlcXVlc3RzLmludGVudCwKICAgICAgY2F0ZWdvcnk6IFNlcnZpY2VSZXF1ZXN0cy5jYXRlZ29yeSwKICAgICAgcHJpb3JpdHk6IFNlcnZpY2VSZXF1ZXN0cy5wcmlvcml0eSwKICAgICAgLy9kb05vdFBlcmZvcm06IFNlcnZpY2VSZXF1ZXN0cy5kb05vdFBlcmZvcm0sCiAgICAgIAogICAgICBjb2RlOiBTZXJ2aWNlUmVxdWVzdHMuY29kZSwKICAgICAgb3JkZXJEZXRhaWw6IFNlcnZpY2VSZXF1ZXN0cy5vcmRlckRldGFpbCwKICAgICAgcXVhbnRpdHk6IFNlcnZpY2VSZXF1ZXN0cy5xdWFudGl0eSwKICAgICAgc3ViamVjdDogU2VydmljZVJlcXVlc3RzLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogU2VydmljZVJlcXVlc3RzLmVuY291bnRlciwKICAgICAgb2NjdXJyZW5jZTogU2VydmljZVJlcXVlc3RzLm9jY3VycmVuY2UsCiAgICAgIGFzTmVlZGVkOiBTZXJ2aWNlUmVxdWVzdHMuYXNOZWVkZWQsCiAgICAgIGF1dGhvcmVkT246IFNlcnZpY2VSZXF1ZXN0cy5hdXRob3JlZE9uLAogICAgICByZXF1ZXN0ZXI6IFNlcnZpY2VSZXF1ZXN0cy5yZXF1ZXN0ZXIsCiAgICAgIHBlcmZvcm1lclR5cGU6IFNlcnZpY2VSZXF1ZXN0cy5wZXJmb3JtZXJUeXBlLAogICAgICBwZXJmb3JtZXI6IFNlcnZpY2VSZXF1ZXN0cy5wZXJmb3JtZXIsCiAgICAgIGxvY2F0aW9uQ29kZTogU2VydmljZVJlcXVlc3RzLmxvY2F0aW9uQ29kZSwKICAgICAgcmVhc29uQ29kZTogU2VydmljZVJlcXVlc3RzLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogU2VydmljZVJlcXVlc3RzLnJlYXNvblJlZmVyZW5jZSwKICAgICAgaW5zdXJhbmNlOiBTZXJ2aWNlUmVxdWVzdHMuaW5zdXJhbmNlLAogICAgICBib2R5U2l0ZTogU2VydmljZVJlcXVlc3RzLmJvZHlTaXRlLAogICAgICBub3RlOiBTZXJ2aWNlUmVxdWVzdHMubm90ZSwKICAgICAgcGF0aWVudEluc3RydWN0aW9uOiBTZXJ2aWNlUmVxdWVzdHMucGF0aWVudEluc3RydWN0aW9uCiAgICB9CgovLyBTZXJ2aWNlTm90UmVxdWVzdGVkIFNERSAtIG5lZ2F0aW9uIHJlcXVlc3RzIChkb05vdFBlcmZvcm0gaXMgdHJ1ZSkKCgpkZWZpbmUgIlNERSBTZXJ2aWNlIE5vdCBSZXF1ZXN0ZWQiOgogIFtTZXJ2aWNlTm90UmVxdWVzdGVkXSBTZXJ2aWNlTm90UmVxcwogICAgd2hlcmUgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICB3aGVyZSBTZXJ2aWNlTm90UmVxcy5hdXRob3JlZE9uIGR1cmluZyBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBTZXJ2aWNlTm90UmVxcy5pZCwKICAgICAgbWV0YTogU2VydmljZU5vdFJlcXMubWV0YSwKICAgICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBTZXJ2aWNlTm90UmVxcy5pbnN0YW50aWF0ZXNDYW5vbmljYWwsCiAgICAgIGluc3RhbnRpYXRlc1VyaTogU2VydmljZU5vdFJlcXMuaW5zdGFudGlhdGVzVXJpLAogICAgICBiYXNlZE9uOiBTZXJ2aWNlTm90UmVxcy5iYXNlZE9uLAogICAgICByZXBsYWNlczogU2VydmljZU5vdFJlcXMucmVwbGFjZXMsCiAgICAgIHJlcXVpc2l0aW9uOiBTZXJ2aWNlTm90UmVxcy5yZXF1aXNpdGlvbiwKICAgICAgc3RhdHVzOiBTZXJ2aWNlTm90UmVxcy5zdGF0dXMsCiAgICAgIGludGVudDogU2VydmljZU5vdFJlcXMuaW50ZW50LAogICAgICBjYXRlZ29yeTogU2VydmljZU5vdFJlcXMuY2F0ZWdvcnksCiAgICAgIHByaW9yaXR5OiBTZXJ2aWNlTm90UmVxcy5wcmlvcml0eSwKICAgICAgZG9Ob3RQZXJmb3JtOiBTZXJ2aWNlTm90UmVxcy5kb05vdFBlcmZvcm0sCiAgICAgIGNvZGU6IFNlcnZpY2VOb3RSZXFzLmNvZGUsCiAgICAgIG9yZGVyRGV0YWlsOiBTZXJ2aWNlTm90UmVxcy5vcmRlckRldGFpbCwKICAgICAgcXVhbnRpdHk6IFNlcnZpY2VOb3RSZXFzLnF1YW50aXR5LAogICAgICBzdWJqZWN0OiBTZXJ2aWNlTm90UmVxcy5zdWJqZWN0LAogICAgICBlbmNvdW50ZXI6IFNlcnZpY2VOb3RSZXFzLmVuY291bnRlciwKICAgICAgb2NjdXJyZW5jZTogU2VydmljZU5vdFJlcXMub2NjdXJyZW5jZSwKICAgICAgYXNOZWVkZWQ6IFNlcnZpY2VOb3RSZXFzLmFzTmVlZGVkLAogICAgICBhdXRob3JlZE9uOiBTZXJ2aWNlTm90UmVxcy5hdXRob3JlZE9uLAogICAgICByZXF1ZXN0ZXI6IFNlcnZpY2VOb3RSZXFzLnJlcXVlc3RlciwKICAgICAgcGVyZm9ybWVyVHlwZTogU2VydmljZU5vdFJlcXMucGVyZm9ybWVyVHlwZSwKICAgICAgcGVyZm9ybWVyOiBTZXJ2aWNlTm90UmVxcy5wZXJmb3JtZXIsCiAgICAgIGxvY2F0aW9uQ29kZTogU2VydmljZU5vdFJlcXMubG9jYXRpb25Db2RlLAogICAgICByZWFzb25Db2RlOiBTZXJ2aWNlTm90UmVxcy5yZWFzb25Db2RlLAogICAgICByZWFzb25SZWZlcmVuY2U6IFNlcnZpY2VOb3RSZXFzLnJlYXNvblJlZmVyZW5jZSwKICAgICAgaW5zdXJhbmNlOiBTZXJ2aWNlTm90UmVxcy5pbnN1cmFuY2UsCiAgICAgIGJvZHlTaXRlOiBTZXJ2aWNlTm90UmVxcy5ib2R5U2l0ZSwKICAgICAgbm90ZTogU2VydmljZU5vdFJlcXMubm90ZSwKICAgICAgcGF0aWVudEluc3RydWN0aW9uOiBTZXJ2aWNlTm90UmVxcy5wYXRpZW50SW5zdHJ1Y3Rpb24KICAgIH0KCi8vIENvbWJpbmVkIFNERSBmb3IgYWxsIFNlcnZpY2UgUmVxdWVzdHMgKGJvdGggcmVndWxhciBhbmQgbmVnYXRpb24pCgoKZGVmaW5lICJTREUgU2VydmljZSBSZXF1ZXN0IjoKICAiU0RFIFNlcnZpY2UgUmVxdWVzdCBCYXNlIgogICAgdW5pb24gIlNERSBTZXJ2aWNlIE5vdCBSZXF1ZXN0ZWQiCgovLyBNaW5pbWFsIHBhdGllbnQgU0RFCgoKZGVmaW5lICJTREUgTWluaW1hbCBQYXRpZW50IjoKICBbUGF0aWVudF0gTWluUHQKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBNaW5QdC5pZCwKICAgICAgbWV0YTogTWluUHQubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBNaW5QdC5leHRlbnNpb24sCiAgICAgIGlkZW50aWZpZXI6IE1pblB0LmlkZW50aWZpZXIsCiAgICAgIGFjdGl2ZTogTWluUHQuYWN0aXZlLAogICAgICBuYW1lOiBNaW5QdC5uYW1lLAogICAgICB0ZWxlY29tOiBNaW5QdC50ZWxlY29tLAogICAgICBnZW5kZXI6IE1pblB0LmdlbmRlciwKICAgICAgYmlydGhEYXRlOiBNaW5QdC5iaXJ0aERhdGUsCiAgICAgIGRlY2Vhc2VkOiBNaW5QdC5kZWNlYXNlZCwKICAgICAgYWRkcmVzczogTWluUHQuYWRkcmVzcywKICAgICAgbWFyaXRhbFN0YXR1czogTWluUHQubWFyaXRhbFN0YXR1cywKICAgICAgbXVsdGlwbGVCaXJ0aDogTWluUHQubXVsdGlwbGVCaXJ0aCwKICAgICAgcGhvdG86IE1pblB0LnBob3RvLAogICAgICBjb250YWN0OiBNaW5QdC5jb250YWN0LAogICAgICBjb21tdW5pY2F0aW9uOiBNaW5QdC5jb21tdW5pY2F0aW9uLAogICAgICBnZW5lcmFsUHJhY3RpdGlvbmVyOiBNaW5QdC5nZW5lcmFsUHJhY3RpdGlvbmVyLAogICAgICBtYW5hZ2luZ09yZ2FuaXphdGlvbjogTWluUHQubWFuYWdpbmdPcmdhbml6YXRpb24sCiAgICAgIGxpbms6IE1pblB0LmxpbmsKICAgIH0KCmRlZmluZSAiU0RFIFNwZWNpbWVucyI6CiAgW1VTQ29yZS5TcGVjaW1lblByb2ZpbGVdIHNwCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKHNwLmNvbGxlY3Rpb24uY29sbGVjdGVkKSBvdmVybGFwcyBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBzcC5pZCwKICAgICAgdHlwZTogc3AudHlwZQogICAgfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBIZWxwZXIgZnVuY3Rpb25zCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKCmRlZmluZSBmdW5jdGlvbiAiQ2hlY2tJUCIoZW5jb3VudGVyIEVuY291bnRlcik6CiAgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgd2hlcmUgZW5jb3VudGVyLmlkID0gSVAuaWQKICApCgovLyBGb3JtZXIgTkhTTkhlbHBlcnMgZnVuY3Rpb25zLCBhZGFwdGVkIGZvciBRSSBDb3JlCgoKZGVmaW5lIGZ1bmN0aW9uICJOb3JtYWxpemUgSW50ZXJ2YWwiKGNob2ljZSBDaG9pY2U8RGF0ZVRpbWUsIEludGVydmFsPERhdGVUaW1lPj4pOgogIGNhc2UKICAgIHdoZW4gY2hvaWNlIGlzIERhdGVUaW1lIHRoZW4gSW50ZXJ2YWxbY2hvaWNlIGFzIERhdGVUaW1lLCBjaG9pY2UgYXMgRGF0ZVRpbWVdCiAgICB3aGVuIGNob2ljZSBpcyBJbnRlcnZhbDxEYXRlVGltZT50aGVuIGNob2ljZSBhcyBJbnRlcnZhbDxEYXRlVGltZT4KICAgIGVsc2UgbnVsbCBhcyBJbnRlcnZhbDxEYXRlVGltZT5lbmQKCmRlZmluZSBmdW5jdGlvbiAiR2V0TG9jYXRpb24iKHJlZmVyZW5jZSBSZWZlcmVuY2UpOgogIHNpbmdsZXRvbiBmcm9tICggW0xvY2F0aW9uXSBMb2NhdGlvbnMKICAgICAgd2hlcmUgTG9jYXRpb25zLmlkID0gR2V0SWQocmVmZXJlbmNlLnJlZmVyZW5jZSkKICApCgpkZWZpbmUgZnVuY3Rpb24gIkdldElkIih1cmkgU3RyaW5nKToKICBMYXN0KFNwbGl0KHVyaSwgJy8nKSkKCmRlZmluZSBmdW5jdGlvbiAiR2V0SWQiKHVyaSBGSElSLnN0cmluZyk6CiAgTGFzdChTcGxpdChGSElSSGVscGVycy5Ub1N0cmluZyh1cmkpLCAnLycpKQ=="/>
<url
value="https://madie.cms.gov/Library-NHSNAcuteCareHospitalMonthlyInitialPopulation1.cql"/>
</content>
</Library>