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
| Active as of 2025-08-22 |
{
"resourceType" : "Library",
"id" : "AHAOverall",
"meta" : {
"profile" : [
🔗 "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"🔗 ,
"http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-computablelibrary"🔗 ,
"http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"🔗 ,
"http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-executablelibrary"🔗 ,
"http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"🔗 ,
"http://hl7.org/fhir/uv/cql/StructureDefinition/elm-json-library"🔗 ,
"http://hl7.org/fhir/uv/cql/StructureDefinition/elm-xml-library"
]
},
"language" : "en",
"text" : {
"status" : "extensions",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n <table class=\"narrative-table\">\n <tbody>\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"metadata\"> </a>Metadata</th>\n\n\n</tr>\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Title</th>\n\n\n\n<td class=\"content-container\">AHAOverall</td>\n\n\n</tr>\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Version</th>\n\n\n\n<td class=\"content-container\">5.1.000</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Topic</th>\n\n\n\n<td class=\"content-container\">FHIR\n</td>\n\n\n</tr>\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Topic</th>\n\n\n\n<td class=\"content-container\">CQL\n</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Steward (Publisher)</th>\n\n\n\n<td class=\"content-container\">Telligen</td>\n\n\n</tr>\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Description</th>\n\n\n\n<td class=\"content-container\"><div><p>This version of the AHAOverall library is patterned after HFCommonDefinitionsQDM library version '3.0.000'</p>\n</div></td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Type</th>\n\n\n\n<td class=\"content-container\">\n <a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a>#logic-library\n\n\n</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"parameters\"> </a>Parameters</th>\n\n\n</tr>\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Parameter</th>\n\n\n\n<td class=\"content-container\">None</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n <tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\">Library Content</th>\n\n\n</tr>\n \n \n <tr>\n <th scope=\"row\" class=\"row-header\">CQL Content</th>\n <td>\n <a name=\"cql-content\"> </a>\n <pre style=\"border: none;\" class=\"content-container highlight language-cql\"><code class=\"language-cql\">/*\nNOTE: For use by March 2026 US Realm Connectathon participants for internal use only. Not for use or distribution in commercial products.\n*/\nlibrary AHAOverall version '5.1.000'\n\nusing USQualityCore version '0.1.0-cibuild'\nusing USCore version '6.1.0-derived'\nusing FHIR version '4.0.1'\n\ninclude hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers\ninclude hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon\ninclude hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon\ninclude hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements\n\ninclude USQualityCoreCommon version '0.1.0-cibuild' called USQualityCoreCommon\n\ncodesystem "SNOMEDCT": 'http://snomed.info/sct'\n\nvalueset "Care Services in Long Term Residential Facility": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1014'\nvalueset "Ejection Fraction": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1134'\nvalueset "Heart Failure": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.376'\nvalueset "Heart Transplant": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1178.33'\nvalueset "Heart Transplant Complications": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1178.56'\nvalueset "Home Healthcare Services": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1016'\nvalueset "Left Ventricular Assist Device Complications": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1178.58'\nvalueset "Left Ventricular Assist Device Placement": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1178.61'\nvalueset "Moderate or Severe": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1092'\nvalueset "Moderate or Severe LVSD": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1090'\nvalueset "Nursing Facility Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1012'\nvalueset "Office Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001'\nvalueset "Outpatient Consultation": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1008'\nvalueset "Patient Provider Interaction": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1012'\n\ncode "Left ventricular systolic dysfunction (disorder)": '134401001' from "SNOMEDCT" display 'Left ventricular systolic dysfunction (disorder)'\n\nparameter "Measurement Period" Interval<DateTime>\n default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)\n\ncontext Patient\n\n/*\n@description: Returns certain finished encounter types that overlap a Heart Failure condition and are during the measurement period: \n * care services in long term residential facility (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1014)\n * home healthcare services (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1016)\n * nursing facility visits (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1012)\n * office visits (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001)\n * outpatient consultation (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1008)\n*/\ndefine "Heart Failure Outpatient Encounter":\n "Outpatient Encounter" QualifyingEncounter\n with ( [Condition: "Heart Failure"] ) HeartFailure\n such that HeartFailure.prevalenceInterval ( ) overlaps day of QualifyingEncounter.period\n and HeartFailure.isVerified ( )\n where QualifyingEncounter.period during day of "Measurement Period"\n and QualifyingEncounter.isEncounterFinished ( )\n\ndefine "Outpatient Encounter":\n ( [Encounter: "Care Services in Long Term Residential Facility"]\n union [Encounter: "Home Healthcare Services"]\n union [Encounter: "Nursing Facility Visit"]\n union [Encounter: "Office Visit"]\n union [Encounter: "Outpatient Consultation"]\n ) \n\n/*\n@description: Returns true if patient has confirmed heart transplant complications that start before the end of a heart failure outpatient encounter with history of moderate or severe LVSD \n*/\ndefine "Has Heart Transplant Complications":\n exists ( ( [Condition: "Heart Transplant Complications"] ) HeartTransplantComplications\n let diagnosisStart: Coalesce(start of HeartTransplantComplications.prevalenceInterval(), HeartTransplantComplications.recordedDate)\n with "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter\n such that date from diagnosisStart on or before date from end of ModerateOrSevereLVSDHFOutpatientEncounter.period\n where HeartTransplantComplications.isVerified ( )\n )\n\n/*\n@description: Returns true if patient has a completed LVAD placement that starts before the end of a heart failure outpatient encounter with history of moderate or severe LVSD\n*/\ndefine "Has Left Ventricular Assist Device":\n exists ( [Procedure: "Left Ventricular Assist Device Placement"] LVADPlacement\n with "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter\n such that LVADPlacement.performed.toInterval ( ) starts before day of end of ModerateOrSevereLVSDHFOutpatientEncounter.period\n where LVADPlacement.status = 'completed'\n )\n\n/*\n@description: Returns true if patient has active LVAD complications that start before the end of a heart failure outpatient encounter with history of moderate or severe LVSD\n*/\ndefine "Has Left Ventricular Assist Device Complications":\n exists ( ( [Condition: "Left Ventricular Assist Device Complications"] ) LVADComplications\n let diagnosisStart: Coalesce(start of LVADComplications.prevalenceInterval(), LVADComplications.recordedDate)\n with "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter\n such that date from diagnosisStart on or before date from end of ModerateOrSevereLVSDHFOutpatientEncounter.period\n where LVADComplications.isVerified ( )\n ) \n\n/*\n@description: Returns certain finished encounter types that occurred during the measurement period: \n * office visits (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001)\n * outpatient consultation (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1008)\n * nursing facility visits (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1012)\n * care services in long term residential facility (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1014)\n * home healthcare services (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1016)\n * patient provider interactions (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1012) \n*/\ndefine "Qualifying Outpatient Encounter During Measurement Period":\n "Outpatient Encounter or Patient Provider Interaction" ValidEncounter\n where ValidEncounter.period during day of "Measurement Period"\n and ValidEncounter.isEncounterFinished ( )\n\ndefine "Outpatient Encounter or Patient Provider Interaction":\n "Outpatient Encounter"\n union [Encounter: "Patient Provider Interaction"]\n\n/*\n@description: Returns completed heart tansplant procedures that start before the end of a heart failure outpatient encounter with history of moderate or severe LVSD\n*/\ndefine "Has Heart Transplant":\n exists ( [Procedure: "Heart Transplant"] HeartTransplant\n with "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter\n such that HeartTransplant.performed.toInterval ( ) starts before end of ModerateOrSevereLVSDHFOutpatientEncounter.period\n where HeartTransplant.status = 'completed'\n )\n\n/*\n@description: Returns heart failure outpatient encounters that start before the end of a moderate or severe LVSD finding\n*/\ndefine "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD":\n "Heart Failure Outpatient Encounter" HFOutpatientEncounter\n with "Moderate or Severe LVSD Findings" LVSDFindings\n such that Coalesce(LVSDFindings.prevalenceInterval(), LVSDFindings.effective.toInterval()) starts before end of HFOutpatientEncounter.period \n\n/*\n@description: Returns a union of the following:\n * Observations where the final, amended or correction ejection fraction result is <= 40\n * Moderate or Severe LVSD conditions where the diagnosis has been confirmed as active\n*/\ndefine "Moderate or Severe LVSD Findings":\n ( [ObservationClinicalResult: "Ejection Fraction"] EjectionFraction\n where EjectionFraction.value as Quantity <= 40 '%'\n and EjectionFraction.status in { 'final', 'amended', 'corrected' }\n )\n union ( ( ( [Condition: "Moderate or Severe LVSD"] )\n union ( ( [Condition: "Left ventricular systolic dysfunction (disorder)"] ) LVSDDiagnosis\n where LVSDDiagnosis.severity in "Moderate or Severe"\n ) ) ModerateOrSevereLVSD\n where ModerateOrSevereLVSD.isVerified ( )\n ) \n\n/*\n@description: Returns true if the patient meets the following criteria:\n * 18 years of age or older,\n * Has two Qualifying Outpatient Encounters During Measurement Period\n * Has a Heart Failure Outpatient Encounter\n*/\ndefine "Is Adult With Two Qualifying Outpatient Encounters and One Heart Failure Outpatient Encounter During the Measurement Period":\n AgeInYearsAt(date from start of "Measurement Period") >= 18\n and exists ( "Qualifying Outpatient Encounter During Measurement Period" Encounter1\n with "Qualifying Outpatient Encounter During Measurement Period" Encounter2\n such that Encounter2.id !~ Encounter1.id\n )\n and exists "Heart Failure Outpatient Encounter" \n\n\n/*\n@description: Returns true if the given Encounter is finished\n*/\ndefine fluent function isEncounterFinished(Encounter Encounter):\n Encounter.status = 'finished'\n\n/*\n@description: Returns true if the given MedicationRequest is ordered during the heart failure outpatient encounter with history of moderate or severe LVSD at any point\n*/\ndefine fluent function isOrderedDuringHeartFailureOutpatientEncounter(MedicationRequest MedicationRequest):\n exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter\n where MedicationRequest.authoredOn during day of ModerateOrSevereLVSDHFOutpatientEncounter.period\n and MedicationRequest.status in { 'active', 'completed' }\n and MedicationRequest.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n and not exists ( ["TaskRejected"] TaskReject\n where TaskReject.focus.references ( MedicationRequest )\n and TaskReject.code ~ USQualityCoreCommon."Fulfill"\n )\n )\n\n/*\n@description: Returns true if the given MedicationNotRequested overlaps after the day of the heart failure outpatient encounter with history of moderate or severe LVSD\n*/\ndefine fluent function isMedicationNotRequestedOrderedDuringHeartFailureOutpatientEncounter(MedicationRequest MedicationNotRequested):\n exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter\n where MedicationRequest.authoredOn during day of ModerateOrSevereLVSDHFOutpatientEncounter.period\n and MedicationRequest.status in { 'completed', 'active' }\n and MedicationRequest.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n and not exists ( ["TaskRejected"] TaskReject\n where TaskReject.focus.references ( MedicationRequest )\n and TaskReject.code ~ USQualityCoreCommon."Fulfill"\n )\n )\n\n/*\n@description: Returns true if the given Condition overlaps the heart failure outpatient encounter with history of moderate or severe LVSD at any point\n*/\ndefine fluent function overlapsHeartFailureOutpatientEncounter(Condition USQualityCore.ConditionEncounterDiagnosis):\n exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter\n where Condition.prevalenceInterval ( ) overlaps day of ModerateOrSevereLVSDHFOutpatientEncounter.period\n and Condition.isVerified ( )\n )\n\n/*\n@overloaded\n@description: Returns true if the given Condition overlaps after the day of the heart failure outpatient encounter with history of moderate or severe LVSD\n*/\ndefine fluent function overlapsAfterHeartFailureOutpatientEncounter(Condition USQualityCore.ConditionEncounterDiagnosis):\n exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter\n where Condition.prevalenceInterval ( ) overlaps after day of ModerateOrSevereLVSDHFOutpatientEncounter.period\n and Condition.isVerified ( )\n )\n\n/*\n@overloaded\n@description: Returns true if the given Procedure overlaps after the day of the heart failure outpatient encounter with history of moderate or severe LVSD\n*/\ndefine fluent function overlapsAfterHeartFailureOutpatientEncounter(Procedure Procedure):\n exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter\n where Procedure.performed.toInterval ( ) overlaps after day of ModerateOrSevereLVSDHFOutpatientEncounter.period\n and Procedure.status = 'completed'\n )\n\n/*\n@overloaded\n@description: Returns true if the given AllergyIntolerance overlaps after the day of the heart failure outpatient encounter with history of moderate or severe LVSD\n*/\ndefine fluent function overlapsAfterHeartFailureOutpatientEncounter(AllergyIntolerance AllergyIntolerance):\n exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter\n where Interval[start of AllergyIntolerance.prevalenceInterval ( ), AllergyIntolerance.lastOccurrence]overlaps after day of ModerateOrSevereLVSDHFOutpatientEncounter.period\n and AllergyIntolerance.isVerified ( )\n )\n \n/*\n@overloaded\n@description: Returns true if the given MedicationRequest overlaps after the day of the heart failure outpatient encounter with history of moderate or severe LVSD\n*/\ndefine fluent function overlapsAfterHeartFailureOutpatientEncounter(MedicationRequest MedicationRequest):\n exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter\n where First((collapse(MedicationRequest.dosageInstruction.timing.repeat.bounds DoseTime\n return TimingBoundToInterval(MedicationRequest.authoredOn, DoseTime)\n )) DrugPeriods\n sort by start of $this\n ) overlaps after day of ModerateOrSevereLVSDHFOutpatientEncounter.period\n and MedicationRequest.status in { 'active', 'completed' }\n and MedicationRequest.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n and not exists ( ["TaskRejected"] TaskReject\n where TaskReject.focus.references ( MedicationRequest )\n and TaskReject.code ~ USQualityCoreCommon."Fulfill"\n )\n )\n\n/*\n@overloaded\n@description: Returns true if the given HeartRateObservation overlaps after the day of the heart failure outpatient encounter with history of moderate or severe LVSD\n*/\ndefine fluent function overlapsAfterHeartFailureOutpatientEncounter(HeartRateObservation USCore.HeartRateProfile):\n exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter\n where HeartRateObservation.effective.toInterval ( ) overlaps after day of ModerateOrSevereLVSDHFOutpatientEncounter.period\n and HeartRateObservation.status in { 'final', 'amended', 'corrected' }\n )\n\n/*\n@description: Converts the possible representations of the timing bound to an interval using the given date as an anchor for durations\n*/ \ndefine function TimingBoundToInterval(startDate System.DateTime, choice Choice<FHIR.Duration, FHIR.Range, FHIR.Period>):\n case\n when choice is FHIR.Period then\n choice as FHIR.Period\n when choice is FHIR.Range then\n Interval[startDate + (choice.low as Quantity), startDate + (choice.high as Quantity)]\n when choice is FHIR.Duration then\n Interval[startDate, startDate + (choice as FHIR.Duration))\n else\n\t\tnull as Interval<DateTime>\n\tend</code></pre>\n </td>\n </tr>\n \n \n\n\n\n<tr>\n <th colspan=\"2\" scope=\"row\" class=\"row-header\">Generated using version 0.5.6 of the sample-content-ig Liquid templates</th>\n</tr>\n\n </tbody>\n </table>\n</div>"
},
"extension" : [
{
"url" : "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem",
"valueReference" : {
"reference" : "Device/cqf-tooling"
}
}
],
"url" : "https://madie.cms.gov/Library/AHAOverall",
"version" : "5.1.000",
"name" : "AHAOverall",
"title" : "AHAOverall",
"status" : "active",
"experimental" : false,
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library"
}
]
},
"date" : "2025-08-22T19:19:03+00:00",
"publisher" : "Telligen",
"description" : "This version of the AHAOverall library is patterned after HFCommonDefinitionsQDM library version '3.0.000'",
"topic" : [
{
"text" : "FHIR"
},
{
"text" : "CQL"
}
],
"content" : [
{
"contentType" : "text/cql",
"data" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBBSEFPdmVyYWxsIHZlcnNpb24gJzUuMS4wMDAnCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KCmNvZGVzeXN0ZW0gIlNOT01FRENUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCgp2YWx1ZXNldCAiQ2FyZSBTZXJ2aWNlcyBpbiBMb25nIFRlcm0gUmVzaWRlbnRpYWwgRmFjaWxpdHkiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMTQnCnZhbHVlc2V0ICJFamVjdGlvbiBGcmFjdGlvbiI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xMTM0Jwp2YWx1ZXNldCAiSGVhcnQgRmFpbHVyZSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4zNzYnCnZhbHVlc2V0ICJIZWFydCBUcmFuc3BsYW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTE3OC4zMycKdmFsdWVzZXQgIkhlYXJ0IFRyYW5zcGxhbnQgQ29tcGxpY2F0aW9ucyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExNzguNTYnCnZhbHVlc2V0ICJIb21lIEhlYWx0aGNhcmUgU2VydmljZXMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMTYnCnZhbHVlc2V0ICJMZWZ0IFZlbnRyaWN1bGFyIEFzc2lzdCBEZXZpY2UgQ29tcGxpY2F0aW9ucyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExNzguNTgnCnZhbHVlc2V0ICJMZWZ0IFZlbnRyaWN1bGFyIEFzc2lzdCBEZXZpY2UgUGxhY2VtZW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTE3OC42MScKdmFsdWVzZXQgIk1vZGVyYXRlIG9yIFNldmVyZSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xMDkyJwp2YWx1ZXNldCAiTW9kZXJhdGUgb3IgU2V2ZXJlIExWU0QiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTA5MCcKdmFsdWVzZXQgIk51cnNpbmcgRmFjaWxpdHkgVmlzaXQiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMTInCnZhbHVlc2V0ICJPZmZpY2UgVmlzaXQiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMDEnCnZhbHVlc2V0ICJPdXRwYXRpZW50IENvbnN1bHRhdGlvbiI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAwOCcKdmFsdWVzZXQgIlBhdGllbnQgUHJvdmlkZXIgSW50ZXJhY3Rpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTAxMicKCmNvZGUgIkxlZnQgdmVudHJpY3VsYXIgc3lzdG9saWMgZHlzZnVuY3Rpb24gKGRpc29yZGVyKSI6ICcxMzQ0MDEwMDEnIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdMZWZ0IHZlbnRyaWN1bGFyIHN5c3RvbGljIGR5c2Z1bmN0aW9uIChkaXNvcmRlciknCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNy0wMS0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50CgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgY2VydGFpbiBmaW5pc2hlZCBlbmNvdW50ZXIgdHlwZXMgdGhhdCBvdmVybGFwIGEgSGVhcnQgRmFpbHVyZSBjb25kaXRpb24gYW5kIGFyZSBkdXJpbmcgdGhlIG1lYXN1cmVtZW50IHBlcmlvZDogCiAgICAgICAgICAgICAgICAqIGNhcmUgc2VydmljZXMgaW4gbG9uZyB0ZXJtIHJlc2lkZW50aWFsIGZhY2lsaXR5IChodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAxNCkKICAgICAgICAgICAgICAgICogaG9tZSBoZWFsdGhjYXJlIHNlcnZpY2VzIChodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAxNikKICAgICAgICAgICAgICAgICogbnVyc2luZyBmYWNpbGl0eSB2aXNpdHMgKGh0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDEyKQogICAgICAgICAgICAgICAgKiBvZmZpY2UgdmlzaXRzIChodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAwMSkKICAgICAgICAgICAgICAgICogb3V0cGF0aWVudCBjb25zdWx0YXRpb24gKGh0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDA4KQoqLwpkZWZpbmUgIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIiOgogICJPdXRwYXRpZW50IEVuY291bnRlciIgUXVhbGlmeWluZ0VuY291bnRlcgogICAgd2l0aCAoIFtDb25kaXRpb246ICJIZWFydCBGYWlsdXJlIl0gKSBIZWFydEZhaWx1cmUKICAgICAgc3VjaCB0aGF0IEhlYXJ0RmFpbHVyZS5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCBIZWFydEZhaWx1cmUuaXNWZXJpZmllZCAoICkKICAgIHdoZXJlIFF1YWxpZnlpbmdFbmNvdW50ZXIucGVyaW9kIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgYW5kIFF1YWxpZnlpbmdFbmNvdW50ZXIuaXNFbmNvdW50ZXJGaW5pc2hlZCAoICkKCmRlZmluZSAiT3V0cGF0aWVudCBFbmNvdW50ZXIiOgogICggW0VuY291bnRlcjogIkNhcmUgU2VydmljZXMgaW4gTG9uZyBUZXJtIFJlc2lkZW50aWFsIEZhY2lsaXR5Il0KICAgICAgdW5pb24gW0VuY291bnRlcjogIkhvbWUgSGVhbHRoY2FyZSBTZXJ2aWNlcyJdCiAgICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJOdXJzaW5nIEZhY2lsaXR5IFZpc2l0Il0KICAgICAgdW5pb24gW0VuY291bnRlcjogIk9mZmljZSBWaXNpdCJdCiAgICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJPdXRwYXRpZW50IENvbnN1bHRhdGlvbiJdCiAgKSAKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHBhdGllbnQgaGFzIGNvbmZpcm1lZCBoZWFydCB0cmFuc3BsYW50IGNvbXBsaWNhdGlvbnMgdGhhdCBzdGFydCBiZWZvcmUgdGhlIGVuZCBvZiBhIGhlYXJ0IGZhaWx1cmUgb3V0cGF0aWVudCBlbmNvdW50ZXIgd2l0aCBoaXN0b3J5IG9mIG1vZGVyYXRlIG9yIHNldmVyZSBMVlNEIAoqLwpkZWZpbmUgIkhhcyBIZWFydCBUcmFuc3BsYW50IENvbXBsaWNhdGlvbnMiOgogIGV4aXN0cyAoICggW0NvbmRpdGlvbjogIkhlYXJ0IFRyYW5zcGxhbnQgQ29tcGxpY2F0aW9ucyJdICkgSGVhcnRUcmFuc3BsYW50Q29tcGxpY2F0aW9ucwogICAgICBsZXQgZGlhZ25vc2lzU3RhcnQ6IENvYWxlc2NlKHN0YXJ0IG9mIEhlYXJ0VHJhbnNwbGFudENvbXBsaWNhdGlvbnMucHJldmFsZW5jZUludGVydmFsKCksIEhlYXJ0VHJhbnNwbGFudENvbXBsaWNhdGlvbnMucmVjb3JkZWREYXRlKQogICAgICB3aXRoICJIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIHdpdGggSGlzdG9yeSBvZiBNb2RlcmF0ZSBvciBTZXZlcmUgTFZTRCIgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIKICAgICAgICBzdWNoIHRoYXQgZGF0ZSBmcm9tIGRpYWdub3Npc1N0YXJ0IG9uIG9yIGJlZm9yZSBkYXRlIGZyb20gZW5kIG9mIE1vZGVyYXRlT3JTZXZlcmVMVlNESEZPdXRwYXRpZW50RW5jb3VudGVyLnBlcmlvZAogICAgICB3aGVyZSBIZWFydFRyYW5zcGxhbnRDb21wbGljYXRpb25zLmlzVmVyaWZpZWQgKCApCiAgKQoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRydWUgaWYgcGF0aWVudCBoYXMgYSBjb21wbGV0ZWQgTFZBRCBwbGFjZW1lbnQgdGhhdCBzdGFydHMgYmVmb3JlIHRoZSBlbmQgb2YgYSBoZWFydCBmYWlsdXJlIG91dHBhdGllbnQgZW5jb3VudGVyIHdpdGggaGlzdG9yeSBvZiBtb2RlcmF0ZSBvciBzZXZlcmUgTFZTRAoqLwpkZWZpbmUgIkhhcyBMZWZ0IFZlbnRyaWN1bGFyIEFzc2lzdCBEZXZpY2UiOgogIGV4aXN0cyAoIFtQcm9jZWR1cmU6ICJMZWZ0IFZlbnRyaWN1bGFyIEFzc2lzdCBEZXZpY2UgUGxhY2VtZW50Il0gTFZBRFBsYWNlbWVudAogICAgICB3aXRoICJIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIHdpdGggSGlzdG9yeSBvZiBNb2RlcmF0ZSBvciBTZXZlcmUgTFZTRCIgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIKICAgICAgICBzdWNoIHRoYXQgTFZBRFBsYWNlbWVudC5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgc3RhcnRzIGJlZm9yZSBkYXkgb2YgZW5kIG9mIE1vZGVyYXRlT3JTZXZlcmVMVlNESEZPdXRwYXRpZW50RW5jb3VudGVyLnBlcmlvZAogICAgICB3aGVyZSBMVkFEUGxhY2VtZW50LnN0YXR1cyA9ICdjb21wbGV0ZWQnCiAgKQoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRydWUgaWYgcGF0aWVudCBoYXMgYWN0aXZlIExWQUQgY29tcGxpY2F0aW9ucyB0aGF0IHN0YXJ0IGJlZm9yZSB0aGUgZW5kIG9mIGEgaGVhcnQgZmFpbHVyZSBvdXRwYXRpZW50IGVuY291bnRlciB3aXRoIGhpc3Rvcnkgb2YgbW9kZXJhdGUgb3Igc2V2ZXJlIExWU0QKKi8KZGVmaW5lICJIYXMgTGVmdCBWZW50cmljdWxhciBBc3Npc3QgRGV2aWNlIENvbXBsaWNhdGlvbnMiOgogIGV4aXN0cyAoICggW0NvbmRpdGlvbjogIkxlZnQgVmVudHJpY3VsYXIgQXNzaXN0IERldmljZSBDb21wbGljYXRpb25zIl0gKSBMVkFEQ29tcGxpY2F0aW9ucwogICAgICBsZXQgZGlhZ25vc2lzU3RhcnQ6IENvYWxlc2NlKHN0YXJ0IG9mIExWQURDb21wbGljYXRpb25zLnByZXZhbGVuY2VJbnRlcnZhbCgpLCBMVkFEQ29tcGxpY2F0aW9ucy5yZWNvcmRlZERhdGUpCiAgICAgIHdpdGggIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIgd2l0aCBIaXN0b3J5IG9mIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlcgogICAgICAgIHN1Y2ggdGhhdCBkYXRlIGZyb20gZGlhZ25vc2lzU3RhcnQgb24gb3IgYmVmb3JlIGRhdGUgZnJvbSBlbmQgb2YgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIucGVyaW9kCiAgICAgIHdoZXJlIExWQURDb21wbGljYXRpb25zLmlzVmVyaWZpZWQgKCApCiAgKSAgICAgICAgICAgICAKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyBjZXJ0YWluIGZpbmlzaGVkIGVuY291bnRlciB0eXBlcyB0aGF0IG9jY3VycmVkIGR1cmluZyB0aGUgbWVhc3VyZW1lbnQgcGVyaW9kOiAKICAgICAgICAgICAgICAgICogb2ZmaWNlIHZpc2l0cyAoaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMDEpCiAgICAgICAgICAgICAgICAqIG91dHBhdGllbnQgY29uc3VsdGF0aW9uIChodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAwOCkKICAgICAgICAgICAgICAgICogbnVyc2luZyBmYWNpbGl0eSB2aXNpdHMgKGh0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDEyKQogICAgICAgICAgICAgICAgKiBjYXJlIHNlcnZpY2VzIGluIGxvbmcgdGVybSByZXNpZGVudGlhbCBmYWNpbGl0eSAoaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMTQpCiAgICAgICAgICAgICAgICAqIGhvbWUgaGVhbHRoY2FyZSBzZXJ2aWNlcyAoaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMTYpCiAgICAgICAgICAgICAgICAqIHBhdGllbnQgcHJvdmlkZXIgaW50ZXJhY3Rpb25zIChodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xMDEyKSAKKi8KZGVmaW5lICJRdWFsaWZ5aW5nIE91dHBhdGllbnQgRW5jb3VudGVyIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogICJPdXRwYXRpZW50IEVuY291bnRlciBvciBQYXRpZW50IFByb3ZpZGVyIEludGVyYWN0aW9uIiBWYWxpZEVuY291bnRlcgogICAgd2hlcmUgVmFsaWRFbmNvdW50ZXIucGVyaW9kIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgYW5kIFZhbGlkRW5jb3VudGVyLmlzRW5jb3VudGVyRmluaXNoZWQgKCApCgpkZWZpbmUgIk91dHBhdGllbnQgRW5jb3VudGVyIG9yIFBhdGllbnQgUHJvdmlkZXIgSW50ZXJhY3Rpb24iOgogICJPdXRwYXRpZW50IEVuY291bnRlciIKICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJQYXRpZW50IFByb3ZpZGVyIEludGVyYWN0aW9uIl0KCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyBjb21wbGV0ZWQgaGVhcnQgdGFuc3BsYW50IHByb2NlZHVyZXMgdGhhdCBzdGFydCBiZWZvcmUgdGhlIGVuZCBvZiBhIGhlYXJ0IGZhaWx1cmUgb3V0cGF0aWVudCBlbmNvdW50ZXIgd2l0aCBoaXN0b3J5IG9mIG1vZGVyYXRlIG9yIHNldmVyZSBMVlNECiovCmRlZmluZSAiSGFzIEhlYXJ0IFRyYW5zcGxhbnQiOgogIGV4aXN0cyAoIFtQcm9jZWR1cmU6ICJIZWFydCBUcmFuc3BsYW50Il0gSGVhcnRUcmFuc3BsYW50CiAgICAgIHdpdGggIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIgd2l0aCBIaXN0b3J5IG9mIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlcgogICAgICAgIHN1Y2ggdGhhdCBIZWFydFRyYW5zcGxhbnQucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIHN0YXJ0cyBiZWZvcmUgZW5kIG9mIE1vZGVyYXRlT3JTZXZlcmVMVlNESEZPdXRwYXRpZW50RW5jb3VudGVyLnBlcmlvZAogICAgICB3aGVyZSBIZWFydFRyYW5zcGxhbnQuc3RhdHVzID0gJ2NvbXBsZXRlZCcKICApCgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgaGVhcnQgZmFpbHVyZSBvdXRwYXRpZW50IGVuY291bnRlcnMgdGhhdCBzdGFydCBiZWZvcmUgdGhlIGVuZCBvZiBhIG1vZGVyYXRlIG9yIHNldmVyZSBMVlNEIGZpbmRpbmcKKi8KZGVmaW5lICJIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIHdpdGggSGlzdG9yeSBvZiBNb2RlcmF0ZSBvciBTZXZlcmUgTFZTRCI6CiAgIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIiIEhGT3V0cGF0aWVudEVuY291bnRlcgogICAgd2l0aCAiTW9kZXJhdGUgb3IgU2V2ZXJlIExWU0QgRmluZGluZ3MiIExWU0RGaW5kaW5ncwogICAgICBzdWNoIHRoYXQgQ29hbGVzY2UoTFZTREZpbmRpbmdzLnByZXZhbGVuY2VJbnRlcnZhbCgpLCBMVlNERmluZGluZ3MuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSkgc3RhcnRzIGJlZm9yZSBlbmQgb2YgSEZPdXRwYXRpZW50RW5jb3VudGVyLnBlcmlvZCAKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyBhIHVuaW9uICBvZiB0aGUgZm9sbG93aW5nOgogICAgICAgICAgICAgICAgKiBPYnNlcnZhdGlvbnMgd2hlcmUgdGhlIGZpbmFsLCBhbWVuZGVkIG9yIGNvcnJlY3Rpb24gZWplY3Rpb24gZnJhY3Rpb24gcmVzdWx0IGlzIDw9IDQwCiAgICAgICAgICAgICAgICAqIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIGNvbmRpdGlvbnMgd2hlcmUgdGhlIGRpYWdub3NpcyBoYXMgYmVlbiBjb25maXJtZWQgYXMgYWN0aXZlCiovCmRlZmluZSAiTW9kZXJhdGUgb3IgU2V2ZXJlIExWU0QgRmluZGluZ3MiOgogICggW09ic2VydmF0aW9uQ2xpbmljYWxSZXN1bHQ6ICJFamVjdGlvbiBGcmFjdGlvbiJdIEVqZWN0aW9uRnJhY3Rpb24KICAgICAgd2hlcmUgRWplY3Rpb25GcmFjdGlvbi52YWx1ZSBhcyBRdWFudGl0eSA8PSA0MCAnJScKICAgICAgICBhbmQgRWplY3Rpb25GcmFjdGlvbi5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICApCiAgICB1bmlvbiAoICggKCBbQ29uZGl0aW9uOiAiTW9kZXJhdGUgb3IgU2V2ZXJlIExWU0QiXSApCiAgICAgIHVuaW9uICggKCBbQ29uZGl0aW9uOiAiTGVmdCB2ZW50cmljdWxhciBzeXN0b2xpYyBkeXNmdW5jdGlvbiAoZGlzb3JkZXIpIl0gKSBMVlNERGlhZ25vc2lzCiAgICAgICAgd2hlcmUgTFZTRERpYWdub3Npcy5zZXZlcml0eSBpbiAiTW9kZXJhdGUgb3IgU2V2ZXJlIgogICAgICApICkgTW9kZXJhdGVPclNldmVyZUxWU0QKICAgICAgd2hlcmUgTW9kZXJhdGVPclNldmVyZUxWU0QuaXNWZXJpZmllZCAoICkKICAgICkgCgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aWVudCBtZWV0cyB0aGUgZm9sbG93aW5nIGNyaXRlcmlhOgogICAgICAgICAgICAgICAgKiAxOCB5ZWFycyBvZiBhZ2Ugb3Igb2xkZXIsCiAgICAgICAgICAgICAgICAqIEhhcyB0d28gUXVhbGlmeWluZyBPdXRwYXRpZW50IEVuY291bnRlcnMgRHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZAogICAgICAgICAgICAgICAgKiBIYXMgYSBIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyCiovCmRlZmluZSAiSXMgQWR1bHQgV2l0aCBUd28gUXVhbGlmeWluZyBPdXRwYXRpZW50IEVuY291bnRlcnMgYW5kIE9uZSBIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIER1cmluZyB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICBBZ2VJblllYXJzQXQoZGF0ZSBmcm9tIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA+PSAxOAogICAgYW5kIGV4aXN0cyAoICJRdWFsaWZ5aW5nIE91dHBhdGllbnQgRW5jb3VudGVyIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIEVuY291bnRlcjEKICAgICAgICB3aXRoICJRdWFsaWZ5aW5nIE91dHBhdGllbnQgRW5jb3VudGVyIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIEVuY291bnRlcjIKICAgICAgICAgIHN1Y2ggdGhhdCBFbmNvdW50ZXIyLmlkICF+IEVuY291bnRlcjEuaWQKICAgICkKICAgIGFuZCBleGlzdHMgIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIiICAgCgoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIEVuY291bnRlciBpcyBmaW5pc2hlZAoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIGlzRW5jb3VudGVyRmluaXNoZWQoRW5jb3VudGVyIEVuY291bnRlcik6CiAgRW5jb3VudGVyLnN0YXR1cyA9ICdmaW5pc2hlZCcKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBNZWRpY2F0aW9uUmVxdWVzdCBpcyBvcmRlcmVkIGR1cmluZyB0aGUgaGVhcnQgZmFpbHVyZSBvdXRwYXRpZW50IGVuY291bnRlciB3aXRoIGhpc3Rvcnkgb2YgbW9kZXJhdGUgb3Igc2V2ZXJlIExWU0QgYXQgYW55IHBvaW50CiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gaXNPcmRlcmVkRHVyaW5nSGVhcnRGYWlsdXJlT3V0cGF0aWVudEVuY291bnRlcihNZWRpY2F0aW9uUmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdCk6CiAgZXhpc3RzICggIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIgd2l0aCBIaXN0b3J5IG9mIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlcgogICAgICB3aGVyZSBNZWRpY2F0aW9uUmVxdWVzdC5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgYW5kIE1lZGljYXRpb25SZXF1ZXN0LnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJyB9CiAgICAgICAgYW5kIE1lZGljYXRpb25SZXF1ZXN0LmludGVudCBpbiB7ICdvcmRlcicsICdvcmlnaW5hbC1vcmRlcicsICdyZWZsZXgtb3JkZXInLCAnZmlsbGVyLW9yZGVyJywgJ2luc3RhbmNlLW9yZGVyJyB9CiAgICAgICAgYW5kIG5vdCBleGlzdHMgKCBbIlRhc2tSZWplY3RlZCJdIFRhc2tSZWplY3QKICAgICAgICAgICAgd2hlcmUgVGFza1JlamVjdC5mb2N1cy5yZWZlcmVuY2VzICggTWVkaWNhdGlvblJlcXVlc3QgKQogICAgICAgICAgICAgIGFuZCBUYXNrUmVqZWN0LmNvZGUgfiBVU1F1YWxpdHlDb3JlQ29tbW9uLiJGdWxmaWxsIgogICAgICAgICkKICApCgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gTWVkaWNhdGlvbk5vdFJlcXVlc3RlZCBvdmVybGFwcyBhZnRlciB0aGUgZGF5IG9mIHRoZSBoZWFydCBmYWlsdXJlIG91dHBhdGllbnQgZW5jb3VudGVyIHdpdGggaGlzdG9yeSBvZiBtb2RlcmF0ZSBvciBzZXZlcmUgTFZTRAoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIGlzTWVkaWNhdGlvbk5vdFJlcXVlc3RlZE9yZGVyZWREdXJpbmdIZWFydEZhaWx1cmVPdXRwYXRpZW50RW5jb3VudGVyKE1lZGljYXRpb25SZXF1ZXN0IE1lZGljYXRpb25Ob3RSZXF1ZXN0ZWQpOgogIGV4aXN0cyAoICJIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIHdpdGggSGlzdG9yeSBvZiBNb2RlcmF0ZSBvciBTZXZlcmUgTFZTRCIgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIKICAgICAgd2hlcmUgTWVkaWNhdGlvblJlcXVlc3QuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIE1vZGVyYXRlT3JTZXZlcmVMVlNESEZPdXRwYXRpZW50RW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCBNZWRpY2F0aW9uUmVxdWVzdC5zdGF0dXMgaW4geyAnY29tcGxldGVkJywgJ2FjdGl2ZScgfQogICAgICAgIGFuZCBNZWRpY2F0aW9uUmVxdWVzdC5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQogICAgICAgIGFuZCBub3QgZXhpc3RzICggWyJUYXNrUmVqZWN0ZWQiXSBUYXNrUmVqZWN0CiAgICAgICAgICAgIHdoZXJlIFRhc2tSZWplY3QuZm9jdXMucmVmZXJlbmNlcyAoIE1lZGljYXRpb25SZXF1ZXN0ICkKICAgICAgICAgICAgICBhbmQgVGFza1JlamVjdC5jb2RlIH4gVVNRdWFsaXR5Q29yZUNvbW1vbi4iRnVsZmlsbCIKICAgICAgICApCiAgKQoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIENvbmRpdGlvbiBvdmVybGFwcyB0aGUgaGVhcnQgZmFpbHVyZSBvdXRwYXRpZW50IGVuY291bnRlciB3aXRoIGhpc3Rvcnkgb2YgbW9kZXJhdGUgb3Igc2V2ZXJlIExWU0QgYXQgYW55IHBvaW50CiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gb3ZlcmxhcHNIZWFydEZhaWx1cmVPdXRwYXRpZW50RW5jb3VudGVyKENvbmRpdGlvbiBVU1F1YWxpdHlDb3JlLkNvbmRpdGlvbkVuY291bnRlckRpYWdub3Npcyk6CiAgZXhpc3RzICggIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIgd2l0aCBIaXN0b3J5IG9mIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlcgogICAgICB3aGVyZSBDb25kaXRpb24ucHJldmFsZW5jZUludGVydmFsICggKSBvdmVybGFwcyBkYXkgb2YgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgYW5kIENvbmRpdGlvbi5pc1ZlcmlmaWVkICggKQogICkKCi8qCkBvdmVybG9hZGVkCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBDb25kaXRpb24gb3ZlcmxhcHMgYWZ0ZXIgdGhlIGRheSBvZiB0aGUgaGVhcnQgZmFpbHVyZSBvdXRwYXRpZW50IGVuY291bnRlciB3aXRoIGhpc3Rvcnkgb2YgbW9kZXJhdGUgb3Igc2V2ZXJlIExWU0QKKi8KZGVmaW5lIGZsdWVudCBmdW5jdGlvbiBvdmVybGFwc0FmdGVySGVhcnRGYWlsdXJlT3V0cGF0aWVudEVuY291bnRlcihDb25kaXRpb24gVVNRdWFsaXR5Q29yZS5Db25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXMpOgogIGV4aXN0cyAoICJIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIHdpdGggSGlzdG9yeSBvZiBNb2RlcmF0ZSBvciBTZXZlcmUgTFZTRCIgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIKICAgICAgd2hlcmUgQ29uZGl0aW9uLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgYWZ0ZXIgZGF5IG9mIE1vZGVyYXRlT3JTZXZlcmVMVlNESEZPdXRwYXRpZW50RW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCBDb25kaXRpb24uaXNWZXJpZmllZCAoICkKICApCgovKgpAb3ZlcmxvYWRlZApAZGVzY3JpcHRpb246IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gUHJvY2VkdXJlIG92ZXJsYXBzIGFmdGVyIHRoZSBkYXkgb2YgdGhlIGhlYXJ0IGZhaWx1cmUgb3V0cGF0aWVudCBlbmNvdW50ZXIgd2l0aCBoaXN0b3J5IG9mIG1vZGVyYXRlIG9yIHNldmVyZSBMVlNECiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gb3ZlcmxhcHNBZnRlckhlYXJ0RmFpbHVyZU91dHBhdGllbnRFbmNvdW50ZXIoUHJvY2VkdXJlIFByb2NlZHVyZSk6CiAgZXhpc3RzICggIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIgd2l0aCBIaXN0b3J5IG9mIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlcgogICAgICB3aGVyZSBQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGFmdGVyIGRheSBvZiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlci5wZXJpb2QKICAgICAgICBhbmQgUHJvY2VkdXJlLnN0YXR1cyA9ICdjb21wbGV0ZWQnCiAgKQoKLyoKQG92ZXJsb2FkZWQKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIEFsbGVyZ3lJbnRvbGVyYW5jZSBvdmVybGFwcyBhZnRlciB0aGUgZGF5IG9mIHRoZSBoZWFydCBmYWlsdXJlIG91dHBhdGllbnQgZW5jb3VudGVyIHdpdGggaGlzdG9yeSBvZiBtb2RlcmF0ZSBvciBzZXZlcmUgTFZTRAoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIG92ZXJsYXBzQWZ0ZXJIZWFydEZhaWx1cmVPdXRwYXRpZW50RW5jb3VudGVyKEFsbGVyZ3lJbnRvbGVyYW5jZSBBbGxlcmd5SW50b2xlcmFuY2UpOgogIGV4aXN0cyAoICJIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIHdpdGggSGlzdG9yeSBvZiBNb2RlcmF0ZSBvciBTZXZlcmUgTFZTRCIgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIKICAgICAgd2hlcmUgSW50ZXJ2YWxbc3RhcnQgb2YgQWxsZXJneUludG9sZXJhbmNlLnByZXZhbGVuY2VJbnRlcnZhbCAoICksIEFsbGVyZ3lJbnRvbGVyYW5jZS5sYXN0T2NjdXJyZW5jZV1vdmVybGFwcyBhZnRlciBkYXkgb2YgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgYW5kIEFsbGVyZ3lJbnRvbGVyYW5jZS5pc1ZlcmlmaWVkICggKQogICkKICAgICAgICAgIAovKgpAb3ZlcmxvYWRlZApAZGVzY3JpcHRpb246IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gTWVkaWNhdGlvblJlcXVlc3Qgb3ZlcmxhcHMgYWZ0ZXIgdGhlIGRheSBvZiB0aGUgaGVhcnQgZmFpbHVyZSBvdXRwYXRpZW50IGVuY291bnRlciB3aXRoIGhpc3Rvcnkgb2YgbW9kZXJhdGUgb3Igc2V2ZXJlIExWU0QKKi8KZGVmaW5lIGZsdWVudCBmdW5jdGlvbiBvdmVybGFwc0FmdGVySGVhcnRGYWlsdXJlT3V0cGF0aWVudEVuY291bnRlcihNZWRpY2F0aW9uUmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdCk6CiAgZXhpc3RzICggIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIgd2l0aCBIaXN0b3J5IG9mIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlcgogICAgICB3aGVyZSBGaXJzdCgoY29sbGFwc2UoTWVkaWNhdGlvblJlcXVlc3QuZG9zYWdlSW5zdHJ1Y3Rpb24udGltaW5nLnJlcGVhdC5ib3VuZHMgRG9zZVRpbWUKICAgICAgICAgICAgcmV0dXJuIFRpbWluZ0JvdW5kVG9JbnRlcnZhbChNZWRpY2F0aW9uUmVxdWVzdC5hdXRob3JlZE9uLCBEb3NlVGltZSkKICAgICAgICApKSBEcnVnUGVyaW9kcwogICAgICAgICAgc29ydCBieSBzdGFydCBvZiAkdGhpcwogICAgICApIG92ZXJsYXBzIGFmdGVyIGRheSBvZiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlci5wZXJpb2QKICAgICAgICBhbmQgTWVkaWNhdGlvblJlcXVlc3Quc3RhdHVzIGluIHsgJ2FjdGl2ZScsICdjb21wbGV0ZWQnIH0KICAgICAgICBhbmQgTWVkaWNhdGlvblJlcXVlc3QuaW50ZW50IGluIHsgJ29yZGVyJywgJ29yaWdpbmFsLW9yZGVyJywgJ3JlZmxleC1vcmRlcicsICdmaWxsZXItb3JkZXInLCAnaW5zdGFuY2Utb3JkZXInIH0KICAgICAgICBhbmQgbm90IGV4aXN0cyAoIFsiVGFza1JlamVjdGVkIl0gVGFza1JlamVjdAogICAgICAgICAgICB3aGVyZSBUYXNrUmVqZWN0LmZvY3VzLnJlZmVyZW5jZXMgKCBNZWRpY2F0aW9uUmVxdWVzdCApCiAgICAgICAgICAgICAgYW5kIFRhc2tSZWplY3QuY29kZSB+IFVTUXVhbGl0eUNvcmVDb21tb24uIkZ1bGZpbGwiCiAgICAgICAgKQogICkKCi8qCkBvdmVybG9hZGVkCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBIZWFydFJhdGVPYnNlcnZhdGlvbiBvdmVybGFwcyBhZnRlciB0aGUgZGF5IG9mIHRoZSBoZWFydCBmYWlsdXJlIG91dHBhdGllbnQgZW5jb3VudGVyIHdpdGggaGlzdG9yeSBvZiBtb2RlcmF0ZSBvciBzZXZlcmUgTFZTRAoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIG92ZXJsYXBzQWZ0ZXJIZWFydEZhaWx1cmVPdXRwYXRpZW50RW5jb3VudGVyKEhlYXJ0UmF0ZU9ic2VydmF0aW9uIFVTQ29yZS5IZWFydFJhdGVQcm9maWxlKToKICBleGlzdHMgKCAiSGVhcnQgRmFpbHVyZSBPdXRwYXRpZW50IEVuY291bnRlciB3aXRoIEhpc3Rvcnkgb2YgTW9kZXJhdGUgb3IgU2V2ZXJlIExWU0QiIE1vZGVyYXRlT3JTZXZlcmVMVlNESEZPdXRwYXRpZW50RW5jb3VudGVyCiAgICAgIHdoZXJlIEhlYXJ0UmF0ZU9ic2VydmF0aW9uLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBvdmVybGFwcyBhZnRlciBkYXkgb2YgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgYW5kIEhlYXJ0UmF0ZU9ic2VydmF0aW9uLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICkKCi8qCkBkZXNjcmlwdGlvbjogQ29udmVydHMgdGhlIHBvc3NpYmxlIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgdGltaW5nIGJvdW5kIHRvIGFuIGludGVydmFsIHVzaW5nIHRoZSBnaXZlbiBkYXRlIGFzIGFuIGFuY2hvciBmb3IgZHVyYXRpb25zCiovIApkZWZpbmUgZnVuY3Rpb24gVGltaW5nQm91bmRUb0ludGVydmFsKHN0YXJ0RGF0ZSBTeXN0ZW0uRGF0ZVRpbWUsIGNob2ljZSBDaG9pY2U8RkhJUi5EdXJhdGlvbiwgRkhJUi5SYW5nZSwgRkhJUi5QZXJpb2Q+KToKICBjYXNlCiAgICB3aGVuIGNob2ljZSBpcyBGSElSLlBlcmlvZCB0aGVuCiAgICAgICAgY2hvaWNlIGFzIEZISVIuUGVyaW9kCiAgICB3aGVuIGNob2ljZSBpcyBGSElSLlJhbmdlIHRoZW4KICAgICAgICBJbnRlcnZhbFtzdGFydERhdGUgKyAoY2hvaWNlLmxvdyBhcyBRdWFudGl0eSksIHN0YXJ0RGF0ZSArIChjaG9pY2UuaGlnaCBhcyBRdWFudGl0eSldCiAgICB3aGVuIGNob2ljZSBpcyBGSElSLkR1cmF0aW9uIHRoZW4KICAgICAgICBJbnRlcnZhbFtzdGFydERhdGUsIHN0YXJ0RGF0ZSArIChjaG9pY2UgYXMgRkhJUi5EdXJhdGlvbikpCiAgICBlbHNlCgkJbnVsbCBhcyBJbnRlcnZhbDxEYXRlVGltZT4KCWVuZA==",
"url" : "https://madie.cms.gov/Library-AHAOverall.cql"
}
]
}