This page is part of the National Healthcare Safety Network (NHSN) Digital Quality Measure (dQM) Reporting Implementation Guide (v1.0.0-ballot: STU 1 Ballot 1) based on FHIR (HL7® FHIR® Standard) R4. . For a full list of available versions, see the Directory of published versions
Page standards status: Informative |
{
"resourceType" : "Library",
"id" : "NHSNdQMAcuteCareHospitalInitialPopulationLibrary",
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: Library NHSNdQMAcuteCareHospitalInitialPopulationLibrary</b></p><a name=\"NHSNdQMAcuteCareHospitalInitialPopulationLibrary\"> </a><a name=\"hcNHSNdQMAcuteCareHospitalInitialPopulationLibrary\"> </a><a name=\"NHSNdQMAcuteCareHospitalInitialPopulationLibrary-en-US\"> </a><h2>Related Artifacts</h2><table class=\"grid\"><tr><td>Depends On</td><td>FHIR model information</td><td><a href=\"http://fhir.org/guides/cqf/common/4.0.1/4.0.1/Library-FHIR-ModelInfo.html\">http://fhir.org/guides/cqf/common/Library/FHIR-ModelInfo|4.0.1</a></td></tr><tr><td>Depends On</td><td>Library FHIRHelpers</td><td><a href=\"http://fhir.org/guides/cqf/common/4.0.1/4.0.1/Library-FHIRHelpers.html\">http://fhir.org/guides/cqf/common/Library/FHIRHelpers|4.0.1</a></td></tr><tr><td>Depends On</td><td>Library Global</td><td><a href=\"http://hl7.org/fhir/us/cqfmeasures/STU4/Library-MATGlobalCommonFunctions.html\">http://hl7.org/fhir/us/cqfmeasures/Library/MATGlobalCommonFunctions</a></td></tr><tr><td>Depends On</td><td>Library SDE</td><td><a href=\"http://hl7.org/fhir/us/cqfmeasures/STU4/Library-SupplementalDataElements.html\">http://hl7.org/fhir/us/cqfmeasures/Library/SupplementalDataElements</a></td></tr><tr><td>Depends On</td><td>Code system ActCode</td><td><a href=\"http://terminology.hl7.org/5.5.0/CodeSystem-v3-ActCode.html\">ActCode</a></td></tr><tr><td>Depends On</td><td>Code system Observation Category</td><td><a href=\"http://terminology.hl7.org/5.5.0/CodeSystem-observation-category.html\">Observation Category Codes</a></td></tr><tr><td>Depends On</td><td>Code system LOINC</td><td><a href=\"http://terminology.hl7.org/5.5.0/CodeSystem-v3-loinc.html\">Logical Observation Identifiers, Names and Codes (LOINC)</a></td></tr><tr><td>Depends On</td><td>Code system V2-0074</td><td><a href=\"http://terminology.hl7.org/5.3.0/CodeSystem-v2-0074.html\">diagnosticServiceSectionId</a></td></tr><tr><td>Depends On</td><td>Value set Inpatient, Emergency, and Observation Locations</td><td><a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113762.1.4.1046.265/expansion\">Inpatient, Emergency, and Observation Locations</a></td></tr><tr><td>Depends On</td><td>Value set Emergency Department Visit</td><td><a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113883.3.117.1.7.1.292/expansion\">Emergency Department Visit</a></td></tr><tr><td>Depends On</td><td>Value set Encounter Inpatient</td><td><a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113883.3.666.5.307/expansion\">Encounter Inpatient</a></td></tr><tr><td>Depends On</td><td>Value set Observation Services</td><td><a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113762.1.4.1111.143/expansion\">Observation Services</a></td></tr><tr><td>Depends On</td><td>Value set NHSN Inpatient Encounter Class Codes</td><td><a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113762.1.4.1046.274/expansion\">http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274</a></td></tr></table><h2>Parameters</h2><table class=\"grid\"><tr><td>Measurement Period</td><td>in</td><td>0</td><td>1</td><td>Period</td></tr><tr><td>Patient</td><td>out</td><td>0</td><td>1</td><td>Patient</td></tr><tr><td>Qualifying Encounters During Measurement Period</td><td>out</td><td>0</td><td>*</td><td>Encounter</td></tr><tr><td>Encounters</td><td>out</td><td>0</td><td>*</td><td>Encounter</td></tr><tr><td>Encounters with Patient Hospital Locations</td><td>out</td><td>0</td><td>*</td><td>Encounter</td></tr><tr><td>Initial Population</td><td>out</td><td>0</td><td>*</td><td>Encounter</td></tr><tr><td>DiagnosticReports</td><td>out</td><td>0</td><td>*</td><td>DiagnosticReport</td></tr><tr><td>Observations</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>IP Encounters Overlap Measurement Period</td><td>out</td><td>0</td><td>*</td><td>Encounter</td></tr><tr><td>Get Locations from IP Encounters in Measurement Period</td><td>out</td><td>0</td><td>*</td><td>Location</td></tr><tr><td>SDE Condition</td><td>out</td><td>0</td><td>*</td><td>Condition</td></tr><tr><td>SDE Device</td><td>out</td><td>0</td><td>*</td><td>Device</td></tr><tr><td>SDE DiagnosticReport Lab</td><td>out</td><td>0</td><td>*</td><td>DiagnosticReport</td></tr><tr><td>SDE DiagnosticReport Note</td><td>out</td><td>0</td><td>*</td><td>DiagnosticReport</td></tr><tr><td>SDE DiagnosticReport Others</td><td>out</td><td>0</td><td>*</td><td>DiagnosticReport</td></tr><tr><td>SDE Encounter</td><td>out</td><td>0</td><td>*</td><td>Encounter</td></tr><tr><td>SDE Location</td><td>out</td><td>0</td><td>*</td><td>Location</td></tr><tr><td>SDE Medication Administration</td><td>out</td><td>0</td><td>*</td><td>MedicationAdministration</td></tr><tr><td>SDE Medication Request</td><td>out</td><td>0</td><td>*</td><td>MedicationRequest</td></tr><tr><td>SDE Medication</td><td>out</td><td>0</td><td>*</td><td>Medication</td></tr><tr><td>SDE Observation Lab Category</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>SDE Observation Vital Signs Category</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>SDE Observation Category</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>SDE Coverage</td><td>out</td><td>0</td><td>*</td><td>Coverage</td></tr><tr><td>SDE Procedure</td><td>out</td><td>0</td><td>*</td><td>Procedure</td></tr><tr><td>SDE Specimen</td><td>out</td><td>0</td><td>*</td><td>Specimen</td></tr><tr><td>SDE Service Request</td><td>out</td><td>0</td><td>*</td><td>ServiceRequest</td></tr><tr><td>SDE Minimal Patient</td><td>out</td><td>0</td><td>1</td><td>Patient</td></tr></table><h2>Data Requirements</h2><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/patient.html\">Patient</a> (<a href=\"http://hl7.org/fhir/R4/patient.html\">Patient</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/encounter.html\">Encounter</a> (<a href=\"http://hl7.org/fhir/R4/encounter.html\">Encounter</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>type</td><td>In ValueSet <a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113883.3.666.5.307/expansion\">Encounter Inpatient</a></td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/encounter.html\">Encounter</a> (<a href=\"http://hl7.org/fhir/R4/encounter.html\">Encounter</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>type</td><td>In ValueSet <a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113883.3.117.1.7.1.292/expansion\">Emergency Department Visit</a></td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/encounter.html\">Encounter</a> (<a href=\"http://hl7.org/fhir/R4/encounter.html\">Encounter</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>type</td><td>In ValueSet <a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113762.1.4.1111.143/expansion\">Observation Services</a></td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/encounter.html\">Encounter</a> (<a href=\"http://hl7.org/fhir/R4/encounter.html\">Encounter</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>class</td><td>In ValueSet <a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113762.1.4.1046.274/expansion\">http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274</a></td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/encounter.html\">Encounter</a> (<a href=\"http://hl7.org/fhir/R4/encounter.html\">Encounter</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/location.html\">Location</a> (<a href=\"http://hl7.org/fhir/R4/location.html\">Location</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/diagnosticreport.html\">DiagnosticReport</a> (<a href=\"http://hl7.org/fhir/R4/diagnosticreport.html\">DiagnosticReport</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a> (<a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/condition.html\">Condition</a> (<a href=\"http://hl7.org/fhir/R4/condition.html\">Condition</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/device.html\">Device</a> (<a href=\"http://hl7.org/fhir/R4/device.html\">Device</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/medicationadministration.html\">MedicationAdministration</a> (<a href=\"http://hl7.org/fhir/R4/medicationadministration.html\">MedicationAdministration</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/medicationrequest.html\">MedicationRequest</a> (<a href=\"http://hl7.org/fhir/R4/medicationrequest.html\">MedicationRequest</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/medication.html\">Medication</a> (<a href=\"http://hl7.org/fhir/R4/medication.html\">Medication</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/coverage.html\">Coverage</a> (<a href=\"http://hl7.org/fhir/R4/coverage.html\">Coverage</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/procedure.html\">Procedure</a> (<a href=\"http://hl7.org/fhir/R4/procedure.html\">Procedure</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/specimen.html\">Specimen</a> (<a href=\"http://hl7.org/fhir/R4/specimen.html\">Specimen</a>)</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/servicerequest.html\">ServiceRequest</a> (<a href=\"http://hl7.org/fhir/R4/servicerequest.html\">ServiceRequest</a>)</td></tr></table><h2>Contents</h2><p><code>text/cql</code></p><pre><code>library NHSNdQMAcuteCareHospitalInitialPopulation version '0.0.014'\n\nusing FHIR version '4.0.1'\n\ninclude FHIRHelpers version '4.0.1' called FHIRHelpers\ninclude MATGlobalCommonFunctionsFHIR4 version '6.1.000' called Global\ninclude SupplementalDataElementsFHIR4 version '2.0.000' called SDE\ninclude SharedResourceCreation version '0.1.005' called SharedResource\n\ncodesystem "ActCode": 'http://terminology.hl7.org/CodeSystem/v3-ActCode'\ncodesystem "Observation Category": 'http://terminology.hl7.org/CodeSystem/observation-category'\ncodesystem "LOINC": 'http://loinc.org' \ncodesystem "V2-0074": 'http://terminology.hl7.org/CodeSystem/v2-0074'\n\nvalueset "Inpatient, Emergency, and Observation Locations": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.265'\nvalueset "Emergency Department Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292'\nvalueset "Encounter Inpatient": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307'\nvalueset "Observation Services": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143'\nvalueset "NHSN Inpatient Encounter Class Codes": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274'\n\n//code for Observation Category\ncode "laboratory": 'laboratory' from "Observation Category" display 'Laboratory'\ncode "social-history": 'social-history' from "Observation Category" display 'Social History'\ncode "vital-signs": 'vital-signs' from "Observation Category" display 'Vital Signs'\ncode "imaging": 'imaging' from "Observation Category" display 'Imaging'\ncode "procedure": 'procedure' from "Observation Category" display 'Procedure'\ncode "survey": 'survey' from "Observation Category" display 'Survey'\n\n//code for Diagnostic Report Category\ncode "LAB": 'LAB' from "V2-0074" display 'Laboratory'\ncode "Radiology": 'LP29684-5' from "LOINC" display 'Radiology'\ncode "Pathology": 'LP7839-6' from "LOINC" display 'Pathology'\ncode "Cardiology": 'LP29708-2' from "LOINC" display 'Cardiology'\n\nparameter "Measurement Period" \n default Interval[@2024-01-01T00:00:00.0, @2024-01-31T00:00:00.0)\n\ncontext Patient \n\ndefine "Qualifying Encounters During Measurement Period":\n ( [Encounter: "Encounter Inpatient"]\n union [Encounter: "Emergency Department Visit"]\n union [Encounter: "Observation Services"]\n union [Encounter: class in "NHSN Inpatient Encounter Class Codes"]) QualifyingEncounters\n where QualifyingEncounters.status in {'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error'}\n and QualifyingEncounters.period overlaps "Measurement Period" \n\ndefine "Encounters with Patient Hospital Locations":\n "Encounters" Encounters\n where exists(\n Encounters.location EncounterLocation\n where Global.GetLocation(EncounterLocation.location).type in "Inpatient, Emergency, and Observation Locations"\n and EncounterLocation.period overlaps Encounters.period\n )\n and Encounters.status in {'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error'}\n and Encounters.period overlaps "Measurement Period"\n\ndefine "Initial Population":\n "Qualifying Encounters During Measurement Period"\n union "Encounters with Patient Hospital Locations"\n\ndefine "Encounters":\n [Encounter]\n\ndefine "DiagnosticReports":\n [DiagnosticReport]\n\ndefine "Observations":\n [Observation]\n\n//Double checking for IP's period during MP as IP is created out of qualifying encounters, which checks for it, \n//and encounter's locations, which doesn't\ndefine "IP Encounters Overlap Measurement Period":\n "Initial Population" IP\n where IP.period overlaps "Measurement Period"\n\ndefine "Get Locations from IP Encounters in Measurement Period":\n flatten("IP Encounters Overlap Measurement Period" Encounters\n let locationElements: Encounters.location\n return\n locationElements LE\n let locationReference: LE.location\n return Global.GetLocation(locationReference))\n\n//============================================================================\n//Supplemental Data Element\n//When FHIR.canonical value is present, US Core 3.1.1 profiles are used\n//When FHIR.canonical value is not present, FHIR Base profiles are used\n//============================================================================\ndefine "SDE Condition":\n [Condition] Conditions \n where exists("Initial Population")\n return SharedResource.ConditionResource(Conditions,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-condition'}})\n\ndefine "SDE Device":\n [Device] Devices \n where exists("Initial Population")\n return DeviceResource(Devices,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-device'}})\n\ndefine "SDE DiagnosticReport Lab":\n "DiagnosticReports" DiagnosticReports\n where (exists(DiagnosticReports.category Category where Category ~ "LAB")\n and exists(\n "Initial Population" IP\n where Global."Normalize Interval"(DiagnosticReports.effective) overlaps IP.period))\n return SharedResource.DiagnosticReportLabResource(DiagnosticReports,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-diagnosticreport-lab'}})\n \ndefine "SDE DiagnosticReport Note":\n "DiagnosticReports" DiagnosticReports\n where ((exists(DiagnosticReports.category Category where Category ~ "Radiology"))\n or exists((DiagnosticReports.category Category where Category ~ "Pathology"))\n or exists((DiagnosticReports.category Category where Category ~ "Cardiology")))\n and exists(\n "Initial Population" IP\n where Global."Normalize Interval"(DiagnosticReports.effective) overlaps IP.period)\n return DiagnosticReportResource(DiagnosticReports,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-diagnosticreport-note'}})\n\ndefine "SDE DiagnosticReport Others":\n [DiagnosticReport] DiagnosticReports\n where not ((exists(DiagnosticReports.category Category where Category ~ "Radiology"))\n or exists((DiagnosticReports.category Category where Category ~ "Pathology"))\n or exists((DiagnosticReports.category Category where Category ~ "Cardiology"))\n or exists(DiagnosticReports.category Category where Category ~ "LAB"))\n and exists("Initial Population" IP\n where Global."Normalize Interval"(DiagnosticReports.effective) overlaps IP.period)\n return DiagnosticReportResource(DiagnosticReports,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-diagnosticreport'}})\n\ndefine "SDE Encounter": \n "Encounters" Encounters\n where exists(\n "Initial Population" IP\n where Encounters.period overlaps IP.period)\n return EncounterResource(Encounters,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-encounter'}})\n\ndefine "SDE Location":\n "Get Locations from IP Encounters in Measurement Period" Locations\n where exists("Initial Population")\n and Locations is not null\n return SharedResource.LocationResource(Locations,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-location'}})\n \ndefine "SDE Medication Administration":\n [MedicationAdministration] MedicationAdministrations \n where exists(\n "Initial Population" IP\n where Global."Normalize Interval"(MedicationAdministrations.effective) overlaps IP.period)\n return SharedResource.MedicationAdministrationResource(MedicationAdministrations,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-medicationadministration'}})\n \ndefine "SDE Medication Request":\n [MedicationRequest] MedicationRequests \n where exists(\n "Initial Population" IP\n where MedicationRequests.authoredOn during IP.period)\n return SharedResource.MedicationRequestResource(MedicationRequests,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-medicationrequest'}})\n\ndefine "SDE Medication":\n ("SDE Medication Request"\n union "SDE Medication Administration") MedReqOrAdmin\n where MedReqOrAdmin.medication is FHIR.Reference\n and exists("Initial Population") //No longer need to check for timing here because it's checked in SDE Medication Request/Administriation\n return SharedResource.MedicationResource(GetMedicationFrom(MedReqOrAdmin.medication),\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-medication'}})\n\ndefine "SDE Observation Lab Category":\n "Observations" Observations \n where (exists(Observations.category Category where Category ~ "laboratory"))\n and exists(\n "Initial Population" IP\n where Global."Normalize Interval"(Observations.effective) overlaps IP.period)\n return SharedResource.ObservationLabResource(Observations,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-observation-lab'}})\n\n//Vital Signs Observation has its own profile in FHIR Base\ndefine "SDE Observation Vital Signs Category":\n "Observations" Observations \n where (exists(Observations.category Category where Category ~ "vital-signs"))\n and exists(\n "Initial Population" IP\n where Global."Normalize Interval"(Observations.effective) overlaps IP.period)\n return ObservationVitalSignsResource(Observations,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-observation-vitals'}})\n\n//Defaulting to base FHIR profile as there are no individual profiles in US Core 3.1.1 that cover these Observation categories\ndefine "SDE Observation Category":\n "Observations" Observations \n where ((exists(Observations.category Category where Category ~ "social-history"))\n or (exists(Observations.category Category where Category ~ "survey"))\n or (exists(Observations.category Category where Category ~ "imaging"))\n or (exists(Observations.category Category where Category ~ "procedure")))\n and exists(\n "Initial Population" IP\n where Global."Normalize Interval"(Observations.effective) overlaps IP.period)\n return ObservationResource(Observations,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-observation'}})\n\ndefine "SDE Coverage": \n\t[Coverage] Coverages\n where exists(\n "Initial Population" IP\n where Coverages.period overlaps IP.period)\n return SharedResource.CoverageResource(Coverages,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-coverage'}})\n\ndefine "SDE Procedure":\n [Procedure] Procedures \n where exists(\n "Initial Population" IP\n where Global."Normalize Interval"(Procedures.performed) overlaps IP.period)\n return SharedResource.ProcedureResource(Procedures,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-procedure'}})\n\ndefine "SDE Specimen":\n [Specimen] Specimens\n where exists(\n "Initial Population" IP\n where Global."Normalize Interval"(Specimens.collection.collected) overlaps IP.period\n )\n return SharedResource.SpecimenResource(Specimens,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-specimen'}})\n\ndefine "SDE Service Request":\n [ServiceRequest] ServiceRequests\n where exists("Initial Population" IP\n where ServiceRequests.authoredOn during IP.period)\n return SharedResource.ServiceRequestResource(ServiceRequests,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/ach-servicerequest'}})\n\ndefine "SDE Minimal Patient":\n Patient p\n return SharedResource.PatientResource(p,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/nhsn-dqm/StructureDefinition/cross-measure-patient'}})\n\n//\n//Functions\n//\ndefine function "GetMedicationFrom"(choice Choice<FHIR.CodeableConcept, FHIR.Reference>):\n case\n when choice is FHIR.Reference then\n GetMedication(choice as FHIR.Reference)\n else\n null\n end\n\ndefine function "GetMedication"(reference Reference ):\n singleton from (\n [Medication] Medications\n where Medications.id = Global.GetId(reference.reference)\n )\n\n//\n//Measure Specific Resource Creation Functions\n//\ndefine function DeviceUdiCarrier(udiCarrier List<FHIR.Device.UdiCarrier>):\n udiCarrier u\n return FHIR.Device.UdiCarrier{\n deviceIdentifier: u.deviceIdentifier,\n issuer: u.issuer,\n jurisdiction: u.jurisdiction,\n carrierAIDC: u.carrierAIDC,\n carrierHRF: u.carrierHRF,\n entryType: u.entryType\n }\n\ndefine function DeviceDeviceName(deviceName List<FHIR.Device.DeviceName>):\n deviceName d\n return FHIR.Device.DeviceName{\n name: d.name,\n type: d.type\n }\n\ndefine function DeviceSpecialization(specialization List<FHIR.Device.Specialization>):\n specialization s\n return FHIR.Device.Specialization{\n systemType: s.systemType,\n version: s.version\n }\n\ndefine function DeviceVersion(version List<FHIR.Device.Version>):\n version v\n return FHIR.Device.Version{\n type: v.type,\n component: v.component,\n value: v.value\n }\n\ndefine function DeviceProperty(deviceProperty List<FHIR.Device.Property>):\n deviceProperty d\n return FHIR.Device.Property{\n id: d.id,\n type: d.type,\n valueQuantity: d.valueQuantity,\n valueCode: d.valueCode\n }\n\ndefine function DeviceResource(device Device, profileURLs List<FHIR.canonical>):\n device d\n return Device{\n id: FHIR.id{value: 'LCR-' + d.id},\n meta: SharedResource.MetaElement(d, profileURLs),\n extension: d.extension,\n definition: d.definition,\n udiCarrier: DeviceUdiCarrier(d.udiCarrier),\n status: d.status,\n statusReason: d.statusReason,\n distinctIdentifier: d.distinctIdentifier,\n manufacturer: d.manufacturer,\n manufactureDate: d.manufactureDate,\n expirationDate: d.expirationDate,\n lotNumber: d.lotNumber,\n serialNumber: d.serialNumber,\n deviceName: DeviceDeviceName(d.deviceName),\n modelNumber: d.modelNumber,\n partNumber: d.partNumber,\n type: d.type,\n specialization: DeviceSpecialization(d.specialization),\n version: DeviceVersion(d.version),\n property: DeviceProperty(d.property),\n patient: d.patient,\n owner: d.owner,\n contact: d.contact,\n location: d.location,\n url: d.url,\n note: d.note,\n safety: d.safety,\n parent: d.parent\n }\n\ndefine function DiagnosticReportResource(diagnosticReport DiagnosticReport, profileURLs List<FHIR.canonical>):\n diagnosticReport d\n return DiagnosticReport{\n id: FHIR.id{value: 'LCR-' + d.id},\n meta: SharedResource.MetaElement(d, profileURLs),\n extension: d.extension,\n basedOn: d.basedOn,\n status: d.status,\n category: d.category,\n code: d.code,\n subject: d.subject,\n encounter: d.encounter,\n effective: d.effective,\n issued: d.issued,\n performer: d.performer,\n resultsInterpreter: d.resultsInterpreter,\n specimen: d.specimen,\n result: d.result,\n conclusion: d.conclusion,\n conclusionCode: d.conclusionCode\n }\n\ndefine function EncounterResource(encounter Encounter, profileURLs List<FHIR.canonical>):\n encounter e\n return Encounter{\n id: FHIR.id{value: 'LCR-' + e.id},\n meta: SharedResource.MetaElement(e, profileURLs),\n extension: e.extension,\n identifier: SharedResource.EncounterIdentifier(e.identifier),\n status: e.status,\n statusHistory: SharedResource.EncounterStatusHistory(e.statusHistory),\n class: e.class,\n classHistory: SharedResource.EncounterClassHistory(e.classHistory),\n type: e.type,\n serviceType: e.serviceType,\n priority: e.priority,\n subject: e.subject,\n period: e.period,\n length: e.length,\n reasonCode: e.reasonCode,\n reasonReference: e.reasonReference,\n diagnosis: SharedResource.EncounterDiagnosis(e.diagnosis),\n account: e.account,\n hospitalization: SharedResource.EncounterHospitalization(e.hospitalization),\n location: SharedResource.EncounterLocation(e.location),\n partOf: e.partOf\n }\n\ndefine function ObservationResource(observation Observation, profileURLs List<FHIR.canonical>):\n observation o\n return Observation{\n id: FHIR.id {value: 'LCR-' + o.id},\n meta: SharedResource.MetaElement(o, profileURLs),\n extension: o.extension,\n partOf: o.partOf,\n status: o.status,\n category: o.category,\n code: o.code,\n subject: o.subject,\n focus: o.focus,\n encounter: o.encounter,\n effective: o.effective,\n issued: o.issued,\n performer: o.performer,\n value: o.value,\n dataAbsentReason: o.dataAbsentReason,\n interpretation: o.interpretation,\n note: o.note,\n bodySite: o.bodySite,\n method: o.method,\n specimen: o.specimen,\n device: o.device,\n referenceRange: SharedResource.ObservationReferenceRange(o.referenceRange),\n hasMember: o.hasMember,\n derivedFrom: o.derivedFrom,\n component: SharedResource.ObservationComponent(o.component)\n }\n\ndefine function ObservationVitalSignsCoding(coding List<Coding>):\n coding c\n return Coding{\n system: c.system,\n version: c.version,\n code: c.code,\n display: c.display,\n userSelected: c.userSelected\n }\n\ndefine function ObservationVitalSignsCategory(category List<CodeableConcept>):\n category c\n return CodeableConcept{\n coding: ObservationVitalSignsCoding(c.coding),\n text: c.text\n }\n\ndefine function ObservationVitalSignsComponent(component List<FHIR.Observation.Component>):\n component c\n return FHIR.Observation.Component{\n code: c.code,\n value: c.value,\n dataAbsentReason: c.dataAbsentReason,\n interpretation: c.interpretation,\n referenceRange: SharedResource.ObservationReferenceRange(c.referenceRange)\n }\n\ndefine function ObservationVitalSignsResource(observation Observation, profileURLs List<FHIR.canonical>):\n observation o\n return Observation{\n id: FHIR.id {value: 'LCR-' + o.id},\n meta: SharedResource.MetaElement(o, profileURLs),\n extension: o.extension,\n partOf: o.partOf,\n status: o.status,\n category: ObservationVitalSignsCategory(o.category),\n code: o.code,\n subject: o.subject,\n focus: o.focus,\n encounter: o.encounter,\n effective: o.effective,\n issued: o.issued,\n performer: o.performer,\n value: o.value,\n dataAbsentReason: o.dataAbsentReason,\n interpretation: o.interpretation,\n note: o.note,\n bodySite: o.bodySite,\n method: o.method,\n specimen: o.specimen,\n device: o.device,\n referenceRange: SharedResource.ObservationReferenceRange(o.referenceRange),\n hasMember: o.hasMember,\n derivedFrom: o.derivedFrom,\n component: ObservationVitalSignsComponent(o.component)\n }</code></pre></div>"
},
"contained" : [
{
"resourceType" : "Parameters",
"id" : "ach-options",
"parameter" : [
{
"name" : "translatorVersion",
"valueString" : "3.5.1"
},
{
"name" : "option",
"valueString" : "EnableDateRangeOptimization"
},
{
"name" : "option",
"valueString" : "EnableAnnotations"
},
{
"name" : "option",
"valueString" : "EnableLocators"
},
{
"name" : "option",
"valueString" : "DisableListDemotion"
},
{
"name" : "option",
"valueString" : "DisableListPromotion"
},
{
"name" : "analyzeDataRequirements",
"valueBoolean" : false
},
{
"name" : "collapseDataRequirements",
"valueBoolean" : true
},
{
"name" : "compatibilityLevel",
"valueString" : "1.5"
},
{
"name" : "enableCqlOnly",
"valueBoolean" : false
},
{
"name" : "errorLevel",
"valueString" : "Info"
},
{
"name" : "signatureLevel",
"valueString" : "None"
},
{
"name" : "validateUnits",
"valueBoolean" : true
},
{
"name" : "verifyOnly",
"valueBoolean" : false
}
]
}
],
"extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/cqf-cqlOptions",
"valueReference" : {
"reference" : "#ach-options"
}
}
],
"url" : "http://hl7.org/fhir/us/nhsn-dqm/Library/NHSNdQMAcuteCareHospitalInitialPopulationLibrary",
"identifier" : [
{
"system" : "urn:ietf:rfc:3986",
"value" : "urn:oid:2.25.316204395913842452684237438142819890580.28.2"
}
],
"version" : "1.0.0-ballot",
"name" : "NHSNdQMAcuteCareHospitalInitialPopulation",
"status" : "active",
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library"
}
]
},
"date" : "2024-08-12T17:44:04+00:00",
"publisher" : "HL7 International / Public Health",
"contact" : [
{
"name" : "HL7 International / Public Health",
"telecom" : [
{
"system" : "url",
"value" : "http://www.hl7.org/Special/committees/pher"
}
]
}
],
"jurisdiction" : [
{
"coding" : [
{
"system" : "urn:iso:std:iso:3166",
"code" : "US",
"display" : "United States of America"
}
]
}
],
"relatedArtifact" : [
{
"type" : "depends-on",
"display" : "FHIR model information",
"resource" : "http://fhir.org/guides/cqf/common/Library/FHIR-ModelInfo|4.0.1"
},
{
"type" : "depends-on",
"display" : "Library FHIRHelpers",
"resource" : "http://fhir.org/guides/cqf/common/Library/FHIRHelpers|4.0.1"
},
{
"type" : "depends-on",
"display" : "Library Global",
"resource" : "http://hl7.org/fhir/us/cqfmeasures/Library/MATGlobalCommonFunctions"
},
{
"type" : "depends-on",
"display" : "Library SDE",
"resource" : "http://hl7.org/fhir/us/cqfmeasures/Library/SupplementalDataElements"
},
{
"type" : "depends-on",
"display" : "Code system ActCode",
"resource" : "http://terminology.hl7.org/CodeSystem/v3-ActCode"
},
{
"type" : "depends-on",
"display" : "Code system Observation Category",
"resource" : "http://terminology.hl7.org/CodeSystem/observation-category"
},
{
"type" : "depends-on",
"display" : "Code system LOINC",
"resource" : "http://loinc.org"
},
{
"type" : "depends-on",
"display" : "Code system V2-0074",
"resource" : "http://terminology.hl7.org/CodeSystem/v2-0074"
},
{
"type" : "depends-on",
"display" : "Value set Inpatient, Emergency, and Observation Locations",
"resource" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.265"
},
{
"type" : "depends-on",
"display" : "Value set Emergency Department Visit",
"resource" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292"
},
{
"type" : "depends-on",
"display" : "Value set Encounter Inpatient",
"resource" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307"
},
{
"type" : "depends-on",
"display" : "Value set Observation Services",
"resource" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143"
},
{
"type" : "depends-on",
"display" : "Value set NHSN Inpatient Encounter Class Codes",
"resource" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274"
}
],
"parameter" : [
{
"name" : "Measurement Period",
"use" : "in",
"min" : 0,
"max" : "1",
"type" : "Period"
},
{
"name" : "Patient",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Patient"
},
{
"name" : "Qualifying Encounters During Measurement Period",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Encounter"
},
{
"name" : "Encounters",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Encounter"
},
{
"name" : "Encounters with Patient Hospital Locations",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Encounter"
},
{
"name" : "Initial Population",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Encounter"
},
{
"name" : "DiagnosticReports",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "DiagnosticReport"
},
{
"name" : "Observations",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "IP Encounters Overlap Measurement Period",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Encounter"
},
{
"name" : "Get Locations from IP Encounters in Measurement Period",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Location"
},
{
"name" : "SDE Condition",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Condition"
},
{
"name" : "SDE Device",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Device"
},
{
"name" : "SDE DiagnosticReport Lab",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "DiagnosticReport"
},
{
"name" : "SDE DiagnosticReport Note",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "DiagnosticReport"
},
{
"name" : "SDE DiagnosticReport Others",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "DiagnosticReport"
},
{
"name" : "SDE Encounter",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Encounter"
},
{
"name" : "SDE Location",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Location"
},
{
"name" : "SDE Medication Administration",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "MedicationAdministration"
},
{
"name" : "SDE Medication Request",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "MedicationRequest"
},
{
"name" : "SDE Medication",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Medication"
},
{
"name" : "SDE Observation Lab Category",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "SDE Observation Vital Signs Category",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "SDE Observation Category",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "SDE Coverage",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Coverage"
},
{
"name" : "SDE Procedure",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Procedure"
},
{
"name" : "SDE Specimen",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Specimen"
},
{
"name" : "SDE Service Request",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "ServiceRequest"
},
{
"name" : "SDE Minimal Patient",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Patient"
}
],
"dataRequirement" : [
{
"type" : "Patient",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Patient"
],
"mustSupport" : [
"id",
"identifier",
"active",
"name",
"telecom",
"gender",
"birthDate",
"deceased",
"address",
"maritalStatus",
"multipleBirth",
"photo",
"contact",
"communication",
"generalPractitioner",
"managingOrganization",
"link"
]
},
{
"type" : "Encounter",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Encounter"
],
"mustSupport" : [
"type",
"status",
"period",
"location",
"id",
"extension",
"identifier",
"statusHistory",
"class",
"classHistory",
"serviceType",
"priority",
"subject",
"length",
"reasonCode",
"reasonReference",
"diagnosis",
"account",
"hospitalization",
"partOf"
],
"codeFilter" : [
{
"path" : "type",
"valueSet" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307"
}
]
},
{
"type" : "Encounter",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Encounter"
],
"mustSupport" : [
"type",
"status",
"period",
"location",
"id",
"extension",
"identifier",
"statusHistory",
"class",
"classHistory",
"serviceType",
"priority",
"subject",
"length",
"reasonCode",
"reasonReference",
"diagnosis",
"account",
"hospitalization",
"partOf"
],
"codeFilter" : [
{
"path" : "type",
"valueSet" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292"
}
]
},
{
"type" : "Encounter",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Encounter"
],
"mustSupport" : [
"type",
"status",
"period",
"location",
"id",
"extension",
"identifier",
"statusHistory",
"class",
"classHistory",
"serviceType",
"priority",
"subject",
"length",
"reasonCode",
"reasonReference",
"diagnosis",
"account",
"hospitalization",
"partOf"
],
"codeFilter" : [
{
"path" : "type",
"valueSet" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143"
}
]
},
{
"type" : "Encounter",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Encounter"
],
"mustSupport" : [
"class",
"status",
"period",
"location",
"id",
"extension",
"identifier",
"statusHistory",
"classHistory",
"type",
"serviceType",
"priority",
"subject",
"length",
"reasonCode",
"reasonReference",
"diagnosis",
"account",
"hospitalization",
"partOf"
],
"codeFilter" : [
{
"path" : "class",
"valueSet" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274"
}
]
},
{
"type" : "Encounter",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Encounter"
],
"mustSupport" : [
"status",
"period",
"location",
"id",
"extension",
"identifier",
"statusHistory",
"class",
"classHistory",
"type",
"serviceType",
"priority",
"subject",
"length",
"reasonCode",
"reasonReference",
"diagnosis",
"account",
"hospitalization",
"partOf"
]
},
{
"type" : "Location",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Location"
],
"mustSupport" : [
"id",
"extension",
"status",
"operationalStatus",
"name",
"alias",
"description",
"mode",
"type",
"telecom",
"address",
"physicalType",
"position",
"managingOrganization",
"partOf",
"hoursOfOperation",
"availabilityExceptions",
"endpoint"
]
},
{
"type" : "DiagnosticReport",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/DiagnosticReport"
],
"mustSupport" : [
"id",
"extension",
"basedOn",
"status",
"category",
"code",
"subject",
"encounter",
"effective",
"issued",
"performer",
"resultsInterpreter",
"specimen",
"result",
"conclusion",
"conclusionCode"
]
},
{
"type" : "Observation",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Observation"
],
"mustSupport" : [
"id",
"extension",
"basedOn",
"partOf",
"status",
"category",
"code",
"subject",
"focus",
"encounter",
"effective",
"issued",
"performer",
"value",
"dataAbsentReason",
"interpretation",
"note",
"bodySite",
"method",
"specimen",
"device",
"referenceRange",
"hasMember",
"derivedFrom",
"component"
]
},
{
"type" : "Condition",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Condition"
],
"mustSupport" : [
"id",
"extension",
"clinicalStatus",
"verificationStatus",
"category",
"severity",
"code",
"bodySite",
"subject",
"encounter",
"onset",
"abatement",
"recordedDate",
"stage",
"evidence",
"note"
]
},
{
"type" : "Device",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Device"
],
"mustSupport" : [
"id",
"extension",
"definition",
"udiCarrier",
"status",
"statusReason",
"distinctIdentifier",
"manufacturer",
"manufactureDate",
"expirationDate",
"lotNumber",
"serialNumber",
"deviceName",
"modelNumber",
"partNumber",
"type",
"specialization",
"version",
"property",
"patient",
"owner",
"contact",
"location",
"url",
"note",
"safety",
"parent"
]
},
{
"type" : "MedicationAdministration",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/MedicationAdministration"
],
"mustSupport" : [
"effective",
"id",
"extension",
"instantiates",
"partOf",
"status",
"statusReason",
"category",
"medication",
"subject",
"context",
"supportingInformation",
"performer",
"reasonCode",
"reasonReference",
"request",
"device",
"note",
"dosage",
"eventHistory"
]
},
{
"type" : "MedicationRequest",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/MedicationRequest"
],
"mustSupport" : [
"authoredOn",
"id",
"extension",
"status",
"statusReason",
"intent",
"category",
"priority",
"doNotPerform",
"reported",
"medication",
"subject",
"encounter",
"requester",
"recorder",
"reasonCode",
"reasonReference",
"instantiatesCanonical",
"instantiatesUri",
"courseOfTherapyType",
"dosageInstruction"
]
},
{
"type" : "Medication",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Medication"
],
"mustSupport" : [
"id",
"extension",
"code",
"status",
"manufacturer",
"form",
"amount",
"ingredient",
"batch"
]
},
{
"type" : "Coverage",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Coverage"
],
"mustSupport" : [
"period",
"id",
"extension",
"status",
"type",
"policyHolder",
"subscriber",
"subscriberId",
"beneficiary",
"dependent",
"relationship",
"payor",
"class",
"order",
"network",
"subrogation",
"contract"
]
},
{
"type" : "Procedure",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Procedure"
],
"mustSupport" : [
"performed",
"id",
"extension",
"instantiatesCanonical",
"instantiatesUri",
"basedOn",
"partOf",
"status",
"statusReason",
"category",
"code",
"subject",
"encounter",
"recorder",
"asserter",
"performer",
"location",
"reasonCode",
"reasonReference",
"bodySite",
"outcome",
"report",
"complication",
"complicationDetail",
"followUp",
"note",
"focalDevice",
"usedReference",
"usedCode"
]
},
{
"type" : "Specimen",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Specimen"
],
"mustSupport" : [
"collection",
"collection.collected",
"id",
"extension",
"identifier",
"accessionIdentifier",
"status",
"type",
"subject",
"receivedTime",
"parent",
"request",
"processing",
"container",
"condition",
"note"
]
},
{
"type" : "ServiceRequest",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/ServiceRequest"
],
"mustSupport" : [
"authoredOn",
"id",
"extension",
"instantiatesCanonical",
"instantiatesUri",
"basedOn",
"replaces",
"requisition",
"status",
"intent",
"category",
"priority",
"doNotPerform",
"code",
"orderDetail",
"quantity",
"subject",
"encounter",
"occurrence",
"asNeeded",
"requester",
"performerType",
"performer",
"locationCode",
"locationReference",
"reasonCode",
"reasonReference",
"insurance",
"supportingInfo",
"specimen",
"bodySite",
"note",
"patientInstruction",
"relevantHistory"
]
}
],
"content" : [
{
"contentType" : "text/cql",
"data" : "bGlicmFyeSBOSFNOZFFNQWN1dGVDYXJlSG9zcGl0YWxJbml0aWFsUG9wdWxhdGlvbiB2ZXJzaW9uICcwLjAuMDE0JwoKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIE1BVEdsb2JhbENvbW1vbkZ1bmN0aW9uc0ZISVI0IHZlcnNpb24gJzYuMS4wMDAnIGNhbGxlZCBHbG9iYWwKaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHNGSElSNCB2ZXJzaW9uICcyLjAuMDAwJyBjYWxsZWQgU0RFCmluY2x1ZGUgU2hhcmVkUmVzb3VyY2VDcmVhdGlvbiB2ZXJzaW9uICcwLjEuMDA1JyBjYWxsZWQgU2hhcmVkUmVzb3VyY2UKCmNvZGVzeXN0ZW0gIkFjdENvZGUiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS92My1BY3RDb2RlJwpjb2Rlc3lzdGVtICJPYnNlcnZhdGlvbiBDYXRlZ29yeSI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL29ic2VydmF0aW9uLWNhdGVnb3J5Jwpjb2Rlc3lzdGVtICJMT0lOQyI6ICdodHRwOi8vbG9pbmMub3JnJyAKY29kZXN5c3RlbSAiVjItMDA3NCI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL3YyLTAwNzQnCgp2YWx1ZXNldCAiSW5wYXRpZW50LCBFbWVyZ2VuY3ksIGFuZCBPYnNlcnZhdGlvbiBMb2NhdGlvbnMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ2LjI2NScKdmFsdWVzZXQgIkVtZXJnZW5jeSBEZXBhcnRtZW50IFZpc2l0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yOTInCnZhbHVlc2V0ICJFbmNvdW50ZXIgSW5wYXRpZW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjY2Ni41LjMwNycKdmFsdWVzZXQgIk9ic2VydmF0aW9uIFNlcnZpY2VzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTExMS4xNDMnCnZhbHVlc2V0ICJOSFNOIElucGF0aWVudCBFbmNvdW50ZXIgQ2xhc3MgQ29kZXMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ2LjI3NCcKCi8vY29kZSBmb3IgT2JzZXJ2YXRpb24gQ2F0ZWdvcnkKY29kZSAibGFib3JhdG9yeSI6ICdsYWJvcmF0b3J5JyBmcm9tICJPYnNlcnZhdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnTGFib3JhdG9yeScKY29kZSAic29jaWFsLWhpc3RvcnkiOiAnc29jaWFsLWhpc3RvcnknIGZyb20gIk9ic2VydmF0aW9uIENhdGVnb3J5IiBkaXNwbGF5ICdTb2NpYWwgSGlzdG9yeScKY29kZSAidml0YWwtc2lnbnMiOiAndml0YWwtc2lnbnMnIGZyb20gIk9ic2VydmF0aW9uIENhdGVnb3J5IiBkaXNwbGF5ICdWaXRhbCBTaWducycKY29kZSAiaW1hZ2luZyI6ICdpbWFnaW5nJyBmcm9tICJPYnNlcnZhdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnSW1hZ2luZycKY29kZSAicHJvY2VkdXJlIjogJ3Byb2NlZHVyZScgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ1Byb2NlZHVyZScKY29kZSAic3VydmV5IjogJ3N1cnZleScgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ1N1cnZleScKCi8vY29kZSBmb3IgRGlhZ25vc3RpYyBSZXBvcnQgQ2F0ZWdvcnkKY29kZSAiTEFCIjogJ0xBQicgZnJvbSAiVjItMDA3NCIgZGlzcGxheSAnTGFib3JhdG9yeScKY29kZSAiUmFkaW9sb2d5IjogJ0xQMjk2ODQtNScgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1JhZGlvbG9neScKY29kZSAiUGF0aG9sb2d5IjogJ0xQNzgzOS02JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnUGF0aG9sb2d5Jwpjb2RlICJDYXJkaW9sb2d5IjogJ0xQMjk3MDgtMicgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ0NhcmRpb2xvZ3knCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgCiAgICBkZWZhdWx0IEludGVydmFsW0AyMDI0LTAxLTAxVDAwOjAwOjAwLjAsIEAyMDI0LTAxLTMxVDAwOjAwOjAwLjApCgpjb250ZXh0IFBhdGllbnQgCgpkZWZpbmUgIlF1YWxpZnlpbmcgRW5jb3VudGVycyBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICggW0VuY291bnRlcjogIkVuY291bnRlciBJbnBhdGllbnQiXQogIHVuaW9uIFtFbmNvdW50ZXI6ICJFbWVyZ2VuY3kgRGVwYXJ0bWVudCBWaXNpdCJdCiAgdW5pb24gW0VuY291bnRlcjogIk9ic2VydmF0aW9uIFNlcnZpY2VzIl0KICB1bmlvbiBbRW5jb3VudGVyOiBjbGFzcyBpbiAiTkhTTiBJbnBhdGllbnQgRW5jb3VudGVyIENsYXNzIENvZGVzIl0pIFF1YWxpZnlpbmdFbmNvdW50ZXJzCiAgd2hlcmUgUXVhbGlmeWluZ0VuY291bnRlcnMuc3RhdHVzIGluIHsnaW4tcHJvZ3Jlc3MnLCAnZmluaXNoZWQnLCAndHJpYWdlZCcsICdvbmxlYXZlJywgJ2VudGVyZWQtaW4tZXJyb3InfQogICAgYW5kIFF1YWxpZnlpbmdFbmNvdW50ZXJzLnBlcmlvZCBvdmVybGFwcyAiTWVhc3VyZW1lbnQgUGVyaW9kIiAKCmRlZmluZSAiRW5jb3VudGVycyB3aXRoIFBhdGllbnQgSG9zcGl0YWwgTG9jYXRpb25zIjoKICAiRW5jb3VudGVycyIgRW5jb3VudGVycwogIHdoZXJlIGV4aXN0cygKICAgIEVuY291bnRlcnMubG9jYXRpb24gRW5jb3VudGVyTG9jYXRpb24KICAgIHdoZXJlIEdsb2JhbC5HZXRMb2NhdGlvbihFbmNvdW50ZXJMb2NhdGlvbi5sb2NhdGlvbikudHlwZSBpbiAiSW5wYXRpZW50LCBFbWVyZ2VuY3ksIGFuZCBPYnNlcnZhdGlvbiBMb2NhdGlvbnMiCiAgICAgIGFuZCBFbmNvdW50ZXJMb2NhdGlvbi5wZXJpb2Qgb3ZlcmxhcHMgRW5jb3VudGVycy5wZXJpb2QKICApCiAgYW5kIEVuY291bnRlcnMuc3RhdHVzIGluIHsnaW4tcHJvZ3Jlc3MnLCAnZmluaXNoZWQnLCAndHJpYWdlZCcsICdvbmxlYXZlJywgJ2VudGVyZWQtaW4tZXJyb3InfQogIGFuZCBFbmNvdW50ZXJzLnBlcmlvZCBvdmVybGFwcyAiTWVhc3VyZW1lbnQgUGVyaW9kIgoKZGVmaW5lICJJbml0aWFsIFBvcHVsYXRpb24iOgogICJRdWFsaWZ5aW5nIEVuY291bnRlcnMgRHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCIKICB1bmlvbiAiRW5jb3VudGVycyB3aXRoIFBhdGllbnQgSG9zcGl0YWwgTG9jYXRpb25zIgoKZGVmaW5lICJFbmNvdW50ZXJzIjoKICBbRW5jb3VudGVyXQoKZGVmaW5lICJEaWFnbm9zdGljUmVwb3J0cyI6CiAgW0RpYWdub3N0aWNSZXBvcnRdCgpkZWZpbmUgIk9ic2VydmF0aW9ucyI6CiAgW09ic2VydmF0aW9uXQoKLy9Eb3VibGUgY2hlY2tpbmcgZm9yIElQJ3MgcGVyaW9kIGR1cmluZyBNUCBhcyBJUCBpcyBjcmVhdGVkIG91dCBvZiBxdWFsaWZ5aW5nIGVuY291bnRlcnMsIHdoaWNoIGNoZWNrcyBmb3IgaXQsIAovL2FuZCBlbmNvdW50ZXIncyBsb2NhdGlvbnMsIHdoaWNoIGRvZXNuJ3QKZGVmaW5lICJJUCBFbmNvdW50ZXJzIE92ZXJsYXAgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogIHdoZXJlIElQLnBlcmlvZCBvdmVybGFwcyAiTWVhc3VyZW1lbnQgUGVyaW9kIgoKZGVmaW5lICJHZXQgTG9jYXRpb25zIGZyb20gSVAgRW5jb3VudGVycyBpbiBNZWFzdXJlbWVudCBQZXJpb2QiOgogIGZsYXR0ZW4oIklQIEVuY291bnRlcnMgT3ZlcmxhcCBNZWFzdXJlbWVudCBQZXJpb2QiIEVuY291bnRlcnMKICBsZXQgbG9jYXRpb25FbGVtZW50czogRW5jb3VudGVycy5sb2NhdGlvbgogIHJldHVybgogICAgbG9jYXRpb25FbGVtZW50cyBMRQogICAgbGV0IGxvY2F0aW9uUmVmZXJlbmNlOiBMRS5sb2NhdGlvbgogICAgcmV0dXJuIEdsb2JhbC5HZXRMb2NhdGlvbihsb2NhdGlvblJlZmVyZW5jZSkpCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy9TdXBwbGVtZW50YWwgRGF0YSBFbGVtZW50Ci8vV2hlbiBGSElSLmNhbm9uaWNhbCB2YWx1ZSBpcyBwcmVzZW50LCBVUyBDb3JlIDMuMS4xIHByb2ZpbGVzIGFyZSB1c2VkCi8vV2hlbiBGSElSLmNhbm9uaWNhbCB2YWx1ZSBpcyBub3QgcHJlc2VudCwgRkhJUiBCYXNlIHByb2ZpbGVzIGFyZSB1c2VkCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkZWZpbmUgIlNERSBDb25kaXRpb24iOgogIFtDb25kaXRpb25dIENvbmRpdGlvbnMgCiAgd2hlcmUgZXhpc3RzKCJJbml0aWFsIFBvcHVsYXRpb24iKQogIHJldHVybiBTaGFyZWRSZXNvdXJjZS5Db25kaXRpb25SZXNvdXJjZShDb25kaXRpb25zLAogIHtGSElSLmNhbm9uaWNhbHt2YWx1ZTogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvbmhzbi1kcW0vU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtY29uZGl0aW9uJ319KQoKZGVmaW5lICJTREUgRGV2aWNlIjoKICBbRGV2aWNlXSBEZXZpY2VzIAogIHdoZXJlIGV4aXN0cygiSW5pdGlhbCBQb3B1bGF0aW9uIikKICByZXR1cm4gRGV2aWNlUmVzb3VyY2UoRGV2aWNlcywKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL25oc24tZHFtL1N0cnVjdHVyZURlZmluaXRpb24vYWNoLWRldmljZSd9fSkKCmRlZmluZSAiU0RFIERpYWdub3N0aWNSZXBvcnQgTGFiIjoKICAiRGlhZ25vc3RpY1JlcG9ydHMiIERpYWdub3N0aWNSZXBvcnRzCiAgd2hlcmUgKGV4aXN0cyhEaWFnbm9zdGljUmVwb3J0cy5jYXRlZ29yeSBDYXRlZ29yeSB3aGVyZSBDYXRlZ29yeSB+ICJMQUIiKQogICAgYW5kIGV4aXN0cygKICAgICAgIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgd2hlcmUgR2xvYmFsLiJOb3JtYWxpemUgSW50ZXJ2YWwiKERpYWdub3N0aWNSZXBvcnRzLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kKSkKICByZXR1cm4gU2hhcmVkUmVzb3VyY2UuRGlhZ25vc3RpY1JlcG9ydExhYlJlc291cmNlKERpYWdub3N0aWNSZXBvcnRzLAogIHtGSElSLmNhbm9uaWNhbHt2YWx1ZTogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvbmhzbi1kcW0vU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtZGlhZ25vc3RpY3JlcG9ydC1sYWInfX0pCiAKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBOb3RlIjoKICAiRGlhZ25vc3RpY1JlcG9ydHMiIERpYWdub3N0aWNSZXBvcnRzCiAgd2hlcmUgKChleGlzdHMoRGlhZ25vc3RpY1JlcG9ydHMuY2F0ZWdvcnkgQ2F0ZWdvcnkgd2hlcmUgQ2F0ZWdvcnkgfiAiUmFkaW9sb2d5IikpCiAgICBvciBleGlzdHMoKERpYWdub3N0aWNSZXBvcnRzLmNhdGVnb3J5IENhdGVnb3J5IHdoZXJlIENhdGVnb3J5IH4gIlBhdGhvbG9neSIpKQogICAgb3IgZXhpc3RzKChEaWFnbm9zdGljUmVwb3J0cy5jYXRlZ29yeSBDYXRlZ29yeSB3aGVyZSBDYXRlZ29yeSB+ICJDYXJkaW9sb2d5IikpKQogICAgYW5kIGV4aXN0cygKICAgICAgIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgd2hlcmUgR2xvYmFsLiJOb3JtYWxpemUgSW50ZXJ2YWwiKERpYWdub3N0aWNSZXBvcnRzLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kKQogIHJldHVybiBEaWFnbm9zdGljUmVwb3J0UmVzb3VyY2UoRGlhZ25vc3RpY1JlcG9ydHMsCiAge0ZISVIuY2Fub25pY2Fse3ZhbHVlOiAnaHR0cDovL2hsNy5vcmcvZmhpci91cy9uaHNuLWRxbS9TdHJ1Y3R1cmVEZWZpbml0aW9uL2FjaC1kaWFnbm9zdGljcmVwb3J0LW5vdGUnfX0pCgpkZWZpbmUgIlNERSBEaWFnbm9zdGljUmVwb3J0IE90aGVycyI6CiAgW0RpYWdub3N0aWNSZXBvcnRdIERpYWdub3N0aWNSZXBvcnRzCiAgd2hlcmUgbm90ICgoZXhpc3RzKERpYWdub3N0aWNSZXBvcnRzLmNhdGVnb3J5IENhdGVnb3J5IHdoZXJlIENhdGVnb3J5IH4gIlJhZGlvbG9neSIpKQogICAgb3IgZXhpc3RzKChEaWFnbm9zdGljUmVwb3J0cy5jYXRlZ29yeSBDYXRlZ29yeSB3aGVyZSBDYXRlZ29yeSB+ICJQYXRob2xvZ3kiKSkKICAgIG9yIGV4aXN0cygoRGlhZ25vc3RpY1JlcG9ydHMuY2F0ZWdvcnkgQ2F0ZWdvcnkgd2hlcmUgQ2F0ZWdvcnkgfiAiQ2FyZGlvbG9neSIpKQogICAgb3IgZXhpc3RzKERpYWdub3N0aWNSZXBvcnRzLmNhdGVnb3J5IENhdGVnb3J5IHdoZXJlIENhdGVnb3J5IH4gIkxBQiIpKQogICAgYW5kIGV4aXN0cygiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICB3aGVyZSBHbG9iYWwuIk5vcm1hbGl6ZSBJbnRlcnZhbCIoRGlhZ25vc3RpY1JlcG9ydHMuZWZmZWN0aXZlKSBvdmVybGFwcyBJUC5wZXJpb2QpCiAgcmV0dXJuIERpYWdub3N0aWNSZXBvcnRSZXNvdXJjZShEaWFnbm9zdGljUmVwb3J0cywKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL25oc24tZHFtL1N0cnVjdHVyZURlZmluaXRpb24vYWNoLWRpYWdub3N0aWNyZXBvcnQnfX0pCgpkZWZpbmUgIlNERSBFbmNvdW50ZXIiOiAKICAiRW5jb3VudGVycyIgRW5jb3VudGVycwogIHdoZXJlIGV4aXN0cygKICAgICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICB3aGVyZSBFbmNvdW50ZXJzLnBlcmlvZCBvdmVybGFwcyBJUC5wZXJpb2QpCiAgcmV0dXJuIEVuY291bnRlclJlc291cmNlKEVuY291bnRlcnMsCiAge0ZISVIuY2Fub25pY2Fse3ZhbHVlOiAnaHR0cDovL2hsNy5vcmcvZmhpci91cy9uaHNuLWRxbS9TdHJ1Y3R1cmVEZWZpbml0aW9uL2FjaC1lbmNvdW50ZXInfX0pCgpkZWZpbmUgIlNERSBMb2NhdGlvbiI6CiAgIkdldCBMb2NhdGlvbnMgZnJvbSBJUCBFbmNvdW50ZXJzIGluIE1lYXN1cmVtZW50IFBlcmlvZCIgTG9jYXRpb25zCiAgd2hlcmUgZXhpc3RzKCJJbml0aWFsIFBvcHVsYXRpb24iKQogIGFuZCBMb2NhdGlvbnMgaXMgbm90IG51bGwKICByZXR1cm4gU2hhcmVkUmVzb3VyY2UuTG9jYXRpb25SZXNvdXJjZShMb2NhdGlvbnMsCiAge0ZISVIuY2Fub25pY2Fse3ZhbHVlOiAnaHR0cDovL2hsNy5vcmcvZmhpci91cy9uaHNuLWRxbS9TdHJ1Y3R1cmVEZWZpbml0aW9uL2FjaC1sb2NhdGlvbid9fSkKIApkZWZpbmUgIlNERSBNZWRpY2F0aW9uIEFkbWluaXN0cmF0aW9uIjoKICBbTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uXSBNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25zIAogIHdoZXJlIGV4aXN0cygKICAgICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICB3aGVyZSBHbG9iYWwuIk5vcm1hbGl6ZSBJbnRlcnZhbCIoTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9ucy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZCkKICByZXR1cm4gU2hhcmVkUmVzb3VyY2UuTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uUmVzb3VyY2UoTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9ucywKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL25oc24tZHFtL1N0cnVjdHVyZURlZmluaXRpb24vYWNoLW1lZGljYXRpb25hZG1pbmlzdHJhdGlvbid9fSkKIApkZWZpbmUgIlNERSBNZWRpY2F0aW9uIFJlcXVlc3QiOgogIFtNZWRpY2F0aW9uUmVxdWVzdF0gTWVkaWNhdGlvblJlcXVlc3RzIAogIHdoZXJlIGV4aXN0cygKICAgICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICB3aGVyZSBNZWRpY2F0aW9uUmVxdWVzdHMuYXV0aG9yZWRPbiBkdXJpbmcgSVAucGVyaW9kKQogIHJldHVybiBTaGFyZWRSZXNvdXJjZS5NZWRpY2F0aW9uUmVxdWVzdFJlc291cmNlKE1lZGljYXRpb25SZXF1ZXN0cywKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL25oc24tZHFtL1N0cnVjdHVyZURlZmluaXRpb24vYWNoLW1lZGljYXRpb25yZXF1ZXN0J319KQoKZGVmaW5lICJTREUgTWVkaWNhdGlvbiI6CiAgKCJTREUgTWVkaWNhdGlvbiBSZXF1ZXN0IgogIHVuaW9uICJTREUgTWVkaWNhdGlvbiBBZG1pbmlzdHJhdGlvbiIpIE1lZFJlcU9yQWRtaW4KICB3aGVyZSBNZWRSZXFPckFkbWluLm1lZGljYXRpb24gaXMgRkhJUi5SZWZlcmVuY2UKICBhbmQgZXhpc3RzKCJJbml0aWFsIFBvcHVsYXRpb24iKSAvL05vIGxvbmdlciBuZWVkIHRvIGNoZWNrIGZvciB0aW1pbmcgaGVyZSBiZWNhdXNlIGl0J3MgY2hlY2tlZCBpbiBTREUgTWVkaWNhdGlvbiBSZXF1ZXN0L0FkbWluaXN0cmlhdGlvbgogIHJldHVybiBTaGFyZWRSZXNvdXJjZS5NZWRpY2F0aW9uUmVzb3VyY2UoR2V0TWVkaWNhdGlvbkZyb20oTWVkUmVxT3JBZG1pbi5tZWRpY2F0aW9uKSwKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL25oc24tZHFtL1N0cnVjdHVyZURlZmluaXRpb24vYWNoLW1lZGljYXRpb24nfX0pCgpkZWZpbmUgIlNERSBPYnNlcnZhdGlvbiBMYWIgQ2F0ZWdvcnkiOgogICJPYnNlcnZhdGlvbnMiIE9ic2VydmF0aW9ucyAKICB3aGVyZSAoZXhpc3RzKE9ic2VydmF0aW9ucy5jYXRlZ29yeSBDYXRlZ29yeSB3aGVyZSBDYXRlZ29yeSB+ICJsYWJvcmF0b3J5IikpCiAgICBhbmQgZXhpc3RzKAogICAgICAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICB3aGVyZSBHbG9iYWwuIk5vcm1hbGl6ZSBJbnRlcnZhbCIoT2JzZXJ2YXRpb25zLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kKQogIHJldHVybiBTaGFyZWRSZXNvdXJjZS5PYnNlcnZhdGlvbkxhYlJlc291cmNlKE9ic2VydmF0aW9ucywKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL25oc24tZHFtL1N0cnVjdHVyZURlZmluaXRpb24vYWNoLW9ic2VydmF0aW9uLWxhYid9fSkKCi8vVml0YWwgU2lnbnMgT2JzZXJ2YXRpb24gaGFzIGl0cyBvd24gcHJvZmlsZSBpbiBGSElSIEJhc2UKZGVmaW5lICJTREUgT2JzZXJ2YXRpb24gVml0YWwgU2lnbnMgQ2F0ZWdvcnkiOgogICJPYnNlcnZhdGlvbnMiIE9ic2VydmF0aW9ucyAKICB3aGVyZSAoZXhpc3RzKE9ic2VydmF0aW9ucy5jYXRlZ29yeSBDYXRlZ29yeSB3aGVyZSBDYXRlZ29yeSB+ICJ2aXRhbC1zaWducyIpKQogICAgYW5kIGV4aXN0cygKICAgICAgIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgd2hlcmUgR2xvYmFsLiJOb3JtYWxpemUgSW50ZXJ2YWwiKE9ic2VydmF0aW9ucy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZCkKICByZXR1cm4gT2JzZXJ2YXRpb25WaXRhbFNpZ25zUmVzb3VyY2UoT2JzZXJ2YXRpb25zLAogIHtGSElSLmNhbm9uaWNhbHt2YWx1ZTogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvbmhzbi1kcW0vU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtb2JzZXJ2YXRpb24tdml0YWxzJ319KQoKLy9EZWZhdWx0aW5nIHRvIGJhc2UgRkhJUiBwcm9maWxlIGFzIHRoZXJlIGFyZSBubyBpbmRpdmlkdWFsIHByb2ZpbGVzIGluIFVTIENvcmUgMy4xLjEgdGhhdCBjb3ZlciB0aGVzZSBPYnNlcnZhdGlvbiBjYXRlZ29yaWVzCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIENhdGVnb3J5IjoKICAiT2JzZXJ2YXRpb25zIiBPYnNlcnZhdGlvbnMgCiAgd2hlcmUgKChleGlzdHMoT2JzZXJ2YXRpb25zLmNhdGVnb3J5IENhdGVnb3J5IHdoZXJlIENhdGVnb3J5IH4gInNvY2lhbC1oaXN0b3J5IikpCiAgICBvciAoZXhpc3RzKE9ic2VydmF0aW9ucy5jYXRlZ29yeSBDYXRlZ29yeSB3aGVyZSBDYXRlZ29yeSB+ICJzdXJ2ZXkiKSkKICAgIG9yIChleGlzdHMoT2JzZXJ2YXRpb25zLmNhdGVnb3J5IENhdGVnb3J5IHdoZXJlIENhdGVnb3J5IH4gImltYWdpbmciKSkKICAgIG9yIChleGlzdHMoT2JzZXJ2YXRpb25zLmNhdGVnb3J5IENhdGVnb3J5IHdoZXJlIENhdGVnb3J5IH4gInByb2NlZHVyZSIpKSkKICAgIGFuZCBleGlzdHMoCiAgICAgICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgIHdoZXJlIEdsb2JhbC4iTm9ybWFsaXplIEludGVydmFsIihPYnNlcnZhdGlvbnMuZWZmZWN0aXZlKSBvdmVybGFwcyBJUC5wZXJpb2QpCiAgcmV0dXJuIE9ic2VydmF0aW9uUmVzb3VyY2UoT2JzZXJ2YXRpb25zLAogIHtGSElSLmNhbm9uaWNhbHt2YWx1ZTogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvbmhzbi1kcW0vU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtb2JzZXJ2YXRpb24nfX0pCgpkZWZpbmUgIlNERSBDb3ZlcmFnZSI6IAoJW0NvdmVyYWdlXSBDb3ZlcmFnZXMKICB3aGVyZSBleGlzdHMoCiAgICAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgd2hlcmUgQ292ZXJhZ2VzLnBlcmlvZCBvdmVybGFwcyBJUC5wZXJpb2QpCiAgcmV0dXJuIFNoYXJlZFJlc291cmNlLkNvdmVyYWdlUmVzb3VyY2UoQ292ZXJhZ2VzLAogIHtGSElSLmNhbm9uaWNhbHt2YWx1ZTogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvbmhzbi1kcW0vU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtY292ZXJhZ2UnfX0pCgpkZWZpbmUgIlNERSBQcm9jZWR1cmUiOgogIFtQcm9jZWR1cmVdIFByb2NlZHVyZXMgCiAgd2hlcmUgZXhpc3RzKAogICAgIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgIHdoZXJlIEdsb2JhbC4iTm9ybWFsaXplIEludGVydmFsIihQcm9jZWR1cmVzLnBlcmZvcm1lZCkgb3ZlcmxhcHMgSVAucGVyaW9kKQogIHJldHVybiBTaGFyZWRSZXNvdXJjZS5Qcm9jZWR1cmVSZXNvdXJjZShQcm9jZWR1cmVzLAogIHtGSElSLmNhbm9uaWNhbHt2YWx1ZTogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvbmhzbi1kcW0vU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtcHJvY2VkdXJlJ319KQoKZGVmaW5lICJTREUgU3BlY2ltZW4iOgogIFtTcGVjaW1lbl0gU3BlY2ltZW5zCiAgd2hlcmUgZXhpc3RzKAogICAgIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgIHdoZXJlIEdsb2JhbC4iTm9ybWFsaXplIEludGVydmFsIihTcGVjaW1lbnMuY29sbGVjdGlvbi5jb2xsZWN0ZWQpIG92ZXJsYXBzIElQLnBlcmlvZAogICkKICByZXR1cm4gU2hhcmVkUmVzb3VyY2UuU3BlY2ltZW5SZXNvdXJjZShTcGVjaW1lbnMsCiAge0ZISVIuY2Fub25pY2Fse3ZhbHVlOiAnaHR0cDovL2hsNy5vcmcvZmhpci91cy9uaHNuLWRxbS9TdHJ1Y3R1cmVEZWZpbml0aW9uL2FjaC1zcGVjaW1lbid9fSkKCmRlZmluZSAiU0RFIFNlcnZpY2UgUmVxdWVzdCI6CiAgW1NlcnZpY2VSZXF1ZXN0XSBTZXJ2aWNlUmVxdWVzdHMKICB3aGVyZSBleGlzdHMoIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgIHdoZXJlIFNlcnZpY2VSZXF1ZXN0cy5hdXRob3JlZE9uIGR1cmluZyBJUC5wZXJpb2QpCiAgcmV0dXJuIFNoYXJlZFJlc291cmNlLlNlcnZpY2VSZXF1ZXN0UmVzb3VyY2UoU2VydmljZVJlcXVlc3RzLAogIHtGSElSLmNhbm9uaWNhbHt2YWx1ZTogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvbmhzbi1kcW0vU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtc2VydmljZXJlcXVlc3QnfX0pCgpkZWZpbmUgIlNERSBNaW5pbWFsIFBhdGllbnQiOgogIFBhdGllbnQgcAogIHJldHVybiBTaGFyZWRSZXNvdXJjZS5QYXRpZW50UmVzb3VyY2UocCwKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL25oc24tZHFtL1N0cnVjdHVyZURlZmluaXRpb24vY3Jvc3MtbWVhc3VyZS1wYXRpZW50J319KQoKLy8KLy9GdW5jdGlvbnMKLy8KZGVmaW5lIGZ1bmN0aW9uICJHZXRNZWRpY2F0aW9uRnJvbSIoY2hvaWNlIENob2ljZTxGSElSLkNvZGVhYmxlQ29uY2VwdCwgRkhJUi5SZWZlcmVuY2U+KToKICBjYXNlCiAgICB3aGVuIGNob2ljZSBpcyBGSElSLlJlZmVyZW5jZSB0aGVuCiAgICAgIEdldE1lZGljYXRpb24oY2hvaWNlIGFzIEZISVIuUmVmZXJlbmNlKQogICAgZWxzZQogICAgICBudWxsCiAgZW5kCgpkZWZpbmUgZnVuY3Rpb24gIkdldE1lZGljYXRpb24iKHJlZmVyZW5jZSBSZWZlcmVuY2UgKToKICBzaW5nbGV0b24gZnJvbSAoCiAgICBbTWVkaWNhdGlvbl0gTWVkaWNhdGlvbnMKICAgIHdoZXJlIE1lZGljYXRpb25zLmlkID0gR2xvYmFsLkdldElkKHJlZmVyZW5jZS5yZWZlcmVuY2UpCiAgKQoKLy8KLy9NZWFzdXJlIFNwZWNpZmljIFJlc291cmNlIENyZWF0aW9uIEZ1bmN0aW9ucwovLwpkZWZpbmUgZnVuY3Rpb24gRGV2aWNlVWRpQ2Fycmllcih1ZGlDYXJyaWVyIExpc3Q8RkhJUi5EZXZpY2UuVWRpQ2Fycmllcj4pOgogIHVkaUNhcnJpZXIgdQogIHJldHVybiBGSElSLkRldmljZS5VZGlDYXJyaWVyewogICAgZGV2aWNlSWRlbnRpZmllcjogdS5kZXZpY2VJZGVudGlmaWVyLAogICAgaXNzdWVyOiB1Lmlzc3VlciwKICAgIGp1cmlzZGljdGlvbjogdS5qdXJpc2RpY3Rpb24sCiAgICBjYXJyaWVyQUlEQzogdS5jYXJyaWVyQUlEQywKICAgIGNhcnJpZXJIUkY6IHUuY2FycmllckhSRiwKICAgIGVudHJ5VHlwZTogdS5lbnRyeVR5cGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gRGV2aWNlRGV2aWNlTmFtZShkZXZpY2VOYW1lIExpc3Q8RkhJUi5EZXZpY2UuRGV2aWNlTmFtZT4pOgogIGRldmljZU5hbWUgZAogIHJldHVybiBGSElSLkRldmljZS5EZXZpY2VOYW1lewogICAgbmFtZTogZC5uYW1lLAogICAgdHlwZTogZC50eXBlCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIERldmljZVNwZWNpYWxpemF0aW9uKHNwZWNpYWxpemF0aW9uIExpc3Q8RkhJUi5EZXZpY2UuU3BlY2lhbGl6YXRpb24+KToKICBzcGVjaWFsaXphdGlvbiBzCiAgcmV0dXJuIEZISVIuRGV2aWNlLlNwZWNpYWxpemF0aW9uewogICAgc3lzdGVtVHlwZTogcy5zeXN0ZW1UeXBlLAogICAgdmVyc2lvbjogcy52ZXJzaW9uCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIERldmljZVZlcnNpb24odmVyc2lvbiBMaXN0PEZISVIuRGV2aWNlLlZlcnNpb24+KToKICB2ZXJzaW9uIHYKICByZXR1cm4gRkhJUi5EZXZpY2UuVmVyc2lvbnsKICAgIHR5cGU6IHYudHlwZSwKICAgIGNvbXBvbmVudDogdi5jb21wb25lbnQsCiAgICB2YWx1ZTogdi52YWx1ZQogIH0KCmRlZmluZSBmdW5jdGlvbiBEZXZpY2VQcm9wZXJ0eShkZXZpY2VQcm9wZXJ0eSBMaXN0PEZISVIuRGV2aWNlLlByb3BlcnR5Pik6CiAgZGV2aWNlUHJvcGVydHkgZAogIHJldHVybiBGSElSLkRldmljZS5Qcm9wZXJ0eXsKICAgIGlkOiBkLmlkLAogICAgdHlwZTogZC50eXBlLAogICAgdmFsdWVRdWFudGl0eTogZC52YWx1ZVF1YW50aXR5LAogICAgdmFsdWVDb2RlOiBkLnZhbHVlQ29kZQogIH0KCmRlZmluZSBmdW5jdGlvbiBEZXZpY2VSZXNvdXJjZShkZXZpY2UgRGV2aWNlLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgZGV2aWNlIGQKICByZXR1cm4gRGV2aWNlewogICAgaWQ6IEZISVIuaWR7dmFsdWU6ICdMQ1ItJyArIGQuaWR9LAogICAgbWV0YTogU2hhcmVkUmVzb3VyY2UuTWV0YUVsZW1lbnQoZCwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBkLmV4dGVuc2lvbiwKICAgIGRlZmluaXRpb246IGQuZGVmaW5pdGlvbiwKICAgIHVkaUNhcnJpZXI6IERldmljZVVkaUNhcnJpZXIoZC51ZGlDYXJyaWVyKSwKICAgIHN0YXR1czogZC5zdGF0dXMsCiAgICBzdGF0dXNSZWFzb246IGQuc3RhdHVzUmVhc29uLAogICAgZGlzdGluY3RJZGVudGlmaWVyOiBkLmRpc3RpbmN0SWRlbnRpZmllciwKICAgIG1hbnVmYWN0dXJlcjogZC5tYW51ZmFjdHVyZXIsCiAgICBtYW51ZmFjdHVyZURhdGU6IGQubWFudWZhY3R1cmVEYXRlLAogICAgZXhwaXJhdGlvbkRhdGU6IGQuZXhwaXJhdGlvbkRhdGUsCiAgICBsb3ROdW1iZXI6IGQubG90TnVtYmVyLAogICAgc2VyaWFsTnVtYmVyOiBkLnNlcmlhbE51bWJlciwKICAgIGRldmljZU5hbWU6IERldmljZURldmljZU5hbWUoZC5kZXZpY2VOYW1lKSwKICAgIG1vZGVsTnVtYmVyOiBkLm1vZGVsTnVtYmVyLAogICAgcGFydE51bWJlcjogZC5wYXJ0TnVtYmVyLAogICAgdHlwZTogZC50eXBlLAogICAgc3BlY2lhbGl6YXRpb246IERldmljZVNwZWNpYWxpemF0aW9uKGQuc3BlY2lhbGl6YXRpb24pLAogICAgdmVyc2lvbjogRGV2aWNlVmVyc2lvbihkLnZlcnNpb24pLAogICAgcHJvcGVydHk6IERldmljZVByb3BlcnR5KGQucHJvcGVydHkpLAogICAgcGF0aWVudDogZC5wYXRpZW50LAogICAgb3duZXI6IGQub3duZXIsCiAgICBjb250YWN0OiBkLmNvbnRhY3QsCiAgICBsb2NhdGlvbjogZC5sb2NhdGlvbiwKICAgIHVybDogZC51cmwsCiAgICBub3RlOiBkLm5vdGUsCiAgICBzYWZldHk6IGQuc2FmZXR5LAogICAgcGFyZW50OiBkLnBhcmVudAogIH0KCmRlZmluZSBmdW5jdGlvbiBEaWFnbm9zdGljUmVwb3J0UmVzb3VyY2UoZGlhZ25vc3RpY1JlcG9ydCBEaWFnbm9zdGljUmVwb3J0LCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgZGlhZ25vc3RpY1JlcG9ydCBkCiAgcmV0dXJuIERpYWdub3N0aWNSZXBvcnR7CiAgICBpZDogRkhJUi5pZHt2YWx1ZTogJ0xDUi0nICsgZC5pZH0sCiAgICBtZXRhOiBTaGFyZWRSZXNvdXJjZS5NZXRhRWxlbWVudChkLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IGQuZXh0ZW5zaW9uLAogICAgYmFzZWRPbjogZC5iYXNlZE9uLAogICAgc3RhdHVzOiBkLnN0YXR1cywKICAgIGNhdGVnb3J5OiBkLmNhdGVnb3J5LAogICAgY29kZTogZC5jb2RlLAogICAgc3ViamVjdDogZC5zdWJqZWN0LAogICAgZW5jb3VudGVyOiBkLmVuY291bnRlciwKICAgIGVmZmVjdGl2ZTogZC5lZmZlY3RpdmUsCiAgICBpc3N1ZWQ6IGQuaXNzdWVkLAogICAgcGVyZm9ybWVyOiBkLnBlcmZvcm1lciwKICAgIHJlc3VsdHNJbnRlcnByZXRlcjogZC5yZXN1bHRzSW50ZXJwcmV0ZXIsCiAgICBzcGVjaW1lbjogZC5zcGVjaW1lbiwKICAgIHJlc3VsdDogZC5yZXN1bHQsCiAgICBjb25jbHVzaW9uOiBkLmNvbmNsdXNpb24sCiAgICBjb25jbHVzaW9uQ29kZTogZC5jb25jbHVzaW9uQ29kZQogIH0KCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJSZXNvdXJjZShlbmNvdW50ZXIgRW5jb3VudGVyLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgZW5jb3VudGVyIGUKICByZXR1cm4gRW5jb3VudGVyewogICAgaWQ6IEZISVIuaWR7dmFsdWU6ICdMQ1ItJyArIGUuaWR9LAogICAgbWV0YTogU2hhcmVkUmVzb3VyY2UuTWV0YUVsZW1lbnQoZSwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBlLmV4dGVuc2lvbiwKICAgIGlkZW50aWZpZXI6IFNoYXJlZFJlc291cmNlLkVuY291bnRlcklkZW50aWZpZXIoZS5pZGVudGlmaWVyKSwKICAgIHN0YXR1czogZS5zdGF0dXMsCiAgICBzdGF0dXNIaXN0b3J5OiBTaGFyZWRSZXNvdXJjZS5FbmNvdW50ZXJTdGF0dXNIaXN0b3J5KGUuc3RhdHVzSGlzdG9yeSksCiAgICBjbGFzczogZS5jbGFzcywKICAgIGNsYXNzSGlzdG9yeTogU2hhcmVkUmVzb3VyY2UuRW5jb3VudGVyQ2xhc3NIaXN0b3J5KGUuY2xhc3NIaXN0b3J5KSwKICAgIHR5cGU6IGUudHlwZSwKICAgIHNlcnZpY2VUeXBlOiBlLnNlcnZpY2VUeXBlLAogICAgcHJpb3JpdHk6IGUucHJpb3JpdHksCiAgICBzdWJqZWN0OiBlLnN1YmplY3QsCiAgICBwZXJpb2Q6IGUucGVyaW9kLAogICAgbGVuZ3RoOiBlLmxlbmd0aCwKICAgIHJlYXNvbkNvZGU6IGUucmVhc29uQ29kZSwKICAgIHJlYXNvblJlZmVyZW5jZTogZS5yZWFzb25SZWZlcmVuY2UsCiAgICBkaWFnbm9zaXM6IFNoYXJlZFJlc291cmNlLkVuY291bnRlckRpYWdub3NpcyhlLmRpYWdub3NpcyksCiAgICBhY2NvdW50OiBlLmFjY291bnQsCiAgICBob3NwaXRhbGl6YXRpb246IFNoYXJlZFJlc291cmNlLkVuY291bnRlckhvc3BpdGFsaXphdGlvbihlLmhvc3BpdGFsaXphdGlvbiksCiAgICBsb2NhdGlvbjogU2hhcmVkUmVzb3VyY2UuRW5jb3VudGVyTG9jYXRpb24oZS5sb2NhdGlvbiksCiAgICBwYXJ0T2Y6IGUucGFydE9mCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE9ic2VydmF0aW9uUmVzb3VyY2Uob2JzZXJ2YXRpb24gT2JzZXJ2YXRpb24sIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBvYnNlcnZhdGlvbiBvCiAgcmV0dXJuIE9ic2VydmF0aW9uewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBvLmlkfSwKICAgIG1ldGE6IFNoYXJlZFJlc291cmNlLk1ldGFFbGVtZW50KG8sIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogby5leHRlbnNpb24sCiAgICBwYXJ0T2Y6IG8ucGFydE9mLAogICAgc3RhdHVzOiBvLnN0YXR1cywKICAgIGNhdGVnb3J5OiBvLmNhdGVnb3J5LAogICAgY29kZTogby5jb2RlLAogICAgc3ViamVjdDogby5zdWJqZWN0LAogICAgZm9jdXM6IG8uZm9jdXMsCiAgICBlbmNvdW50ZXI6IG8uZW5jb3VudGVyLAogICAgZWZmZWN0aXZlOiBvLmVmZmVjdGl2ZSwKICAgIGlzc3VlZDogby5pc3N1ZWQsCiAgICBwZXJmb3JtZXI6IG8ucGVyZm9ybWVyLAogICAgdmFsdWU6IG8udmFsdWUsCiAgICBkYXRhQWJzZW50UmVhc29uOiBvLmRhdGFBYnNlbnRSZWFzb24sCiAgICBpbnRlcnByZXRhdGlvbjogby5pbnRlcnByZXRhdGlvbiwKICAgIG5vdGU6IG8ubm90ZSwKICAgIGJvZHlTaXRlOiBvLmJvZHlTaXRlLAogICAgbWV0aG9kOiBvLm1ldGhvZCwKICAgIHNwZWNpbWVuOiBvLnNwZWNpbWVuLAogICAgZGV2aWNlOiBvLmRldmljZSwKICAgIHJlZmVyZW5jZVJhbmdlOiBTaGFyZWRSZXNvdXJjZS5PYnNlcnZhdGlvblJlZmVyZW5jZVJhbmdlKG8ucmVmZXJlbmNlUmFuZ2UpLAogICAgaGFzTWVtYmVyOiBvLmhhc01lbWJlciwKICAgIGRlcml2ZWRGcm9tOiBvLmRlcml2ZWRGcm9tLAogICAgY29tcG9uZW50OiBTaGFyZWRSZXNvdXJjZS5PYnNlcnZhdGlvbkNvbXBvbmVudChvLmNvbXBvbmVudCkKICB9CgpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25WaXRhbFNpZ25zQ29kaW5nKGNvZGluZyBMaXN0PENvZGluZz4pOgogIGNvZGluZyBjCiAgcmV0dXJuIENvZGluZ3sKICAgIHN5c3RlbTogYy5zeXN0ZW0sCiAgICB2ZXJzaW9uOiBjLnZlcnNpb24sCiAgICBjb2RlOiBjLmNvZGUsCiAgICBkaXNwbGF5OiBjLmRpc3BsYXksCiAgICB1c2VyU2VsZWN0ZWQ6IGMudXNlclNlbGVjdGVkCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE9ic2VydmF0aW9uVml0YWxTaWduc0NhdGVnb3J5KGNhdGVnb3J5IExpc3Q8Q29kZWFibGVDb25jZXB0Pik6CiAgY2F0ZWdvcnkgYwogIHJldHVybiBDb2RlYWJsZUNvbmNlcHR7CiAgICBjb2Rpbmc6IE9ic2VydmF0aW9uVml0YWxTaWduc0NvZGluZyhjLmNvZGluZyksCiAgICB0ZXh0OiBjLnRleHQKICB9CgpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25WaXRhbFNpZ25zQ29tcG9uZW50KGNvbXBvbmVudCBMaXN0PEZISVIuT2JzZXJ2YXRpb24uQ29tcG9uZW50Pik6CiAgY29tcG9uZW50IGMKICByZXR1cm4gRkhJUi5PYnNlcnZhdGlvbi5Db21wb25lbnR7CiAgICBjb2RlOiBjLmNvZGUsCiAgICB2YWx1ZTogYy52YWx1ZSwKICAgIGRhdGFBYnNlbnRSZWFzb246IGMuZGF0YUFic2VudFJlYXNvbiwKICAgIGludGVycHJldGF0aW9uOiBjLmludGVycHJldGF0aW9uLAogICAgcmVmZXJlbmNlUmFuZ2U6IFNoYXJlZFJlc291cmNlLk9ic2VydmF0aW9uUmVmZXJlbmNlUmFuZ2UoYy5yZWZlcmVuY2VSYW5nZSkKICB9CgpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25WaXRhbFNpZ25zUmVzb3VyY2Uob2JzZXJ2YXRpb24gT2JzZXJ2YXRpb24sIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBvYnNlcnZhdGlvbiBvCiAgcmV0dXJuIE9ic2VydmF0aW9uewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBvLmlkfSwKICAgIG1ldGE6IFNoYXJlZFJlc291cmNlLk1ldGFFbGVtZW50KG8sIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogby5leHRlbnNpb24sCiAgICBwYXJ0T2Y6IG8ucGFydE9mLAogICAgc3RhdHVzOiBvLnN0YXR1cywKICAgIGNhdGVnb3J5OiBPYnNlcnZhdGlvblZpdGFsU2lnbnNDYXRlZ29yeShvLmNhdGVnb3J5KSwKICAgIGNvZGU6IG8uY29kZSwKICAgIHN1YmplY3Q6IG8uc3ViamVjdCwKICAgIGZvY3VzOiBvLmZvY3VzLAogICAgZW5jb3VudGVyOiBvLmVuY291bnRlciwKICAgIGVmZmVjdGl2ZTogby5lZmZlY3RpdmUsCiAgICBpc3N1ZWQ6IG8uaXNzdWVkLAogICAgcGVyZm9ybWVyOiBvLnBlcmZvcm1lciwKICAgIHZhbHVlOiBvLnZhbHVlLAogICAgZGF0YUFic2VudFJlYXNvbjogby5kYXRhQWJzZW50UmVhc29uLAogICAgaW50ZXJwcmV0YXRpb246IG8uaW50ZXJwcmV0YXRpb24sCiAgICBub3RlOiBvLm5vdGUsCiAgICBib2R5U2l0ZTogby5ib2R5U2l0ZSwKICAgIG1ldGhvZDogby5tZXRob2QsCiAgICBzcGVjaW1lbjogby5zcGVjaW1lbiwKICAgIGRldmljZTogby5kZXZpY2UsCiAgICByZWZlcmVuY2VSYW5nZTogU2hhcmVkUmVzb3VyY2UuT2JzZXJ2YXRpb25SZWZlcmVuY2VSYW5nZShvLnJlZmVyZW5jZVJhbmdlKSwKICAgIGhhc01lbWJlcjogby5oYXNNZW1iZXIsCiAgICBkZXJpdmVkRnJvbTogby5kZXJpdmVkRnJvbSwKICAgIGNvbXBvbmVudDogT2JzZXJ2YXRpb25WaXRhbFNpZ25zQ29tcG9uZW50KG8uY29tcG9uZW50KQogIH0="
}
]
}