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

: US Quality Core Common - JSON Representation

Active as of 2025-10-02

Raw json | Download

{
  "resourceType" : "Library",
  "id" : "USQualityCoreCommon",
  "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"
    ]
  },
  "text" : {
    "status" : "extensions",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n  <table class=\"narrative-table\">\n    <tbody>\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"metadata\"> </a>Metadata</th>\n\n\n</tr>\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Title</th>\n\n\n\n<td class=\"content-container\">US Quality Core Common</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\">0.1.0-cibuild</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\">ICF</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>Common terminologies and functions used in US Quality Core-based CQL artifacts</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\">/*\n@description: Common terminologies and functions used in USQualityCore-based CQL artifacts\n@comment: The modelinfo included with the published IG is using [derived modelinfo](https://hl7.org/fhir/uv/cql/using-modelinfo.html#derived-modelinfo)\nto enable reuse of data elements and libraries defined in the [US Core](https://hl7.org/fhir/us/core) \nand [US CQL](https://hl7.org/fhir/us/cql) Common IGs. This library is derived from the QICoreCommon shared library used in FHIR-based \nquality measure specifications. However, most of the functionality that was defined in QICoreCommon is now either in [FHIRCommon](https://hl7.org/fhir/uv/cql/Library-FHIRCommon.html)\nor [USCoreCommon](https://hl7.org/fhir/us/cql/Library-USCoreCommon.html).\n*/\nlibrary USQualityCoreCommon version '0.1.0-cibuild'\n\nusing USQualityCore version '0.1.0-cibuild'\n\ninclude hl7.fhir.uv.cql.FHIRHelpers version '4.0.1'\ninclude hl7.fhir.uv.cql.FHIRCommon version '2.0.0'\n\ncodesystem &quot;ActCode&quot;: 'http://terminology.hl7.org/CodeSystem/v3-ActCode'\ncodesystem &quot;TaskCodeSystem&quot;: 'http://hl7.org/fhir/CodeSystem/task-code' \ncodesystem &quot;AllergyIntoleranceClinicalStatusCodes&quot;: 'http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical'\ncodesystem &quot;AllergyIntoleranceVerificationStatusCodes&quot;: 'http://terminology.hl7.org/CodeSystem/allergyintolerance-verification'\n\n// Allergy/Intolerance Verification Status Codes - Consider value sets for these\ncode &quot;allergy-unconfirmed&quot;: 'unconfirmed' from AllergyIntoleranceVerificationStatusCodes display 'Unconfirmed'\ncode &quot;allergy-confirmed&quot;: 'confirmed' from AllergyIntoleranceVerificationStatusCodes display 'Confirmed'\ncode &quot;allergy-refuted&quot;: 'refuted' from AllergyIntoleranceVerificationStatusCodes display 'Refuted'\ncode &quot;allergy-active&quot;: 'active' from AllergyIntoleranceClinicalStatusCodes display 'Active'\n\n// Encounter Class Codes\ncode &quot;ambulatory&quot;: 'AMB' from ActCode display 'ambulatory'\ncode &quot;emergency&quot;: 'EMER' from ActCode display 'emergency'\ncode &quot;field&quot;: 'FLD' from ActCode display 'field'\ncode &quot;home health&quot;: 'HH' from ActCode display 'home health'\ncode &quot;inpatient encounter&quot;: 'IMP' from ActCode display 'inpatient encounter'\ncode &quot;inpatient acute&quot;: 'ACUTE' from ActCode display 'inpatient acute'\ncode &quot;inpatient non-acute&quot;: 'NONAC' from ActCode display 'inpatient non-acute'\ncode &quot;observation encounter&quot;: 'OBSENC' from ActCode display 'observation encounter'\ncode &quot;pre-admission&quot;: 'PRENC' from ActCode display 'pre-admission'\ncode &quot;short stay&quot;: 'SS' from ActCode display 'short stay'\ncode &quot;virtual&quot;: 'VR' from ActCode display 'Virtual'\n\n//Task codes\ncode &quot;Fulfill&quot;: 'fulfill' from &quot;TaskCodeSystem&quot; display 'Fulfill'\n\ncontext Patient\n\n/*\n@description: Returns the id of the given uri (i.e. everything after the last slash)\n*/\ndefine fluent function getId(uri String):\n  Last(Split(uri, '/'))\n\n/*\n@description: Returns the System.ValueSet instance with the url and version (if present) of the given canonical reference\n*/\ndefine fluent function toValueSet(canonical FHIR.canonical):\n  System.ValueSet {\n    id: canonical.url(),\n    version: canonical.version()\n  }\n\n/*\n@description: Converts the activity extent pattern used to represent negated activities to either a codeableConcept or a value set\n@seealso: [Negation In US Quality Core](negation.html)\n*/\ndefine fluent function toActivityExtent(codeableConcept FHIR.CodeableConcept):\n  (codeableConcept.ext('http://fhir.org/guides/astp/us-quality-core/StructureDefinition/us-quality-core-notDoneValueSet').value) X\n    return\n      if X is not null \n        then X.toValueSet()\n        else codeableConcept\n\n/*\n@description: Returns the value of the recorded extension for a Communication Not Done\n*/\ndefine fluent function recorded(communicationNotDone CommunicationNotDone):\n  communicationNotDone.ext('http://fhir.org/guides/astp/us-quality-core/StructureDefinition/us-quality-core-recorded').value as FHIR.dateTime\n\n/*\n@description: Returns the negated activity extent for a Communication Not Done\n@seealso: [Negation In US Quality Core](negation.html)\n*/\ndefine fluent function topic(communicationNotDone CommunicationNotDone):\n  communicationNotDone.topic.toActivityExtent()\n\n/*\n@description: Returns the value of the doNotPerformReason extension for a Device Not Requested\n*/\ndefine fluent function doNotPerformReason(deviceNotRequested DeviceNotRequested):\n  deviceNotRequested.ext('http://fhir.org/guides/astp/us-quality-core/StructureDefinition/us-quality-core-doNotPerformReason').value as FHIR.CodeableConcept\n\n/*\n@description: Returns the value of the doNotPerform extension for a Device Not Requested\n*/\ndefine fluent function doNotPerform(deviceNotRequested DeviceNotRequested):\n  deviceNotRequested.ext('http://hl7.org/fhir/5.0/StructureDefinition/extension-DeviceRequest.doNotPerform').value as FHIR.boolean\n\n/*\n@description: Returns the negated activity extent for a Device Not Requested\n@seealso: [Negation In US Quality Core](negation.html)\n*/\ndefine fluent function code(deviceNotRequested DeviceNotRequested):\n  deviceNotRequested.code.toActivityExtent()\n\n/*\n@description: Returns the value of the abatement extension for a FamilyMemberHistory\n*/\ndefine fluent function abatement(familyMemberHistory FamilyMemberHistory):\n  familyMemberHistory.ext('hl7.org/fhir/StructureDefinition/familymemberhistory-abatement').value as Choice&lt;FHIR.date, FHIR.Age, FHIR.boolean&gt;\n\n/*\n@description: Returns the value of the severity extension for a FamilyMemberHistory\n*/\ndefine fluent function severity(familyMemberHistory FamilyMemberHistory):\n  familyMemberHistory.ext('hl7.org/fhir/StructureDefinition/familymemberhistory-severity').value as FHIR.CodeableConcept\n\n/*\n@description: Returns the negated activity extent for an Immunization Not Done\n@seealso: [Negation In US Quality Core](negation.html)\n*/\ndefine fluent function vaccineCode(immunizationNotDone ImmunizationNotDone):\n  immunizationNotDone.vaccineCode.toActivityExtent()\n\n/*\n@description: Returns the value of the recorded extension for a Medication Administration Not Done\n*/\ndefine fluent function recorded(medicationAdministrationNotDone MedicationAdministrationNotDone):\n  medicationAdministrationNotDone.ext('http://fhir.org/guides/astp/us-quality-core/StructureDefinition/us-quality-core-recorded').value as FHIR.dateTime\n\n/*\n@description: Returns the negated activity extent for a Medication Administration Not Done\n@seealso: [Negation In US Quality Core](negation.html)\n*/\ndefine fluent function medication(medicationAdministrationNotDone MedicationAdministrationNotDone):\n  medicationAdministrationNotDone.medication.toActivityExtent()\n\n/*\n@description: Returns the value of the recorded extension for a Medication Dispense Declined\n*/\ndefine fluent function recorded(medicationDispenseDeclined MedicationDispenseDeclined):\n  medicationDispenseDeclined.ext('http://fhir.org/guides/astp/us-quality-core/StructureDefinition/us-quality-core-recorded').value as FHIR.dateTime\n\n/*\n@description: Returns the negated activity extent for a Medication Dispense Declined\n@seealso: [Negation In US Quality Core](negation.html)\n*/\ndefine fluent function medication(medicationDispenseDeclined MedicationDispenseDeclined):\n  (medicationDispenseDeclined.medication as FHIR.CodeableConcept).toActivityExtent()\n\n/*\n@description: Returns the negated activity extent for a Medication Not Requested\n@seealso: [Negation In US Quality Core](negation.html)\n*/\ndefine fluent function medication(medicationNotRequested MedicationNotRequested):\n  medicationNotRequested.medication.toActivityExtent()\n\n/*\n@description: Returns the notDoneReason for an ObservationCancelled\n*/\ndefine fluent function notDoneReason(observationCancelled ObservationCancelled):\n  observationCancelled.ext('http://fhir.org/guides/astp/us-quality-core/StructureDefinition/us-quality-core-notDoneReason').value as FHIR.CodeableConcept\n\n/*\n@description: Returns the negated activity extent for an ObservationCancelled\n@seealso: [Negation In US Quality Core](negation.html)\n*/\ndefine fluent function code(observationCancelled ObservationCancelled):\n  observationCancelled.code.toActivityExtent()\n\n/*\n@description: Returns the value of the recorded extension for a Procedure\n*/\ndefine fluent function recorded(procedure Procedure):\n  procedure.ext('http://fhir.org/guides/astp/us-quality-core/StructureDefinition/us-quality-core-recorded').value as FHIR.dateTime\n\n/*\n@description: Returns the value of the recorded extension for a Medication Administration Not Done\n*/\ndefine fluent function recorded(procedureNotDone ProcedureNotDone):\n  procedureNotDone.ext('http://fhir.org/guides/astp/us-quality-core/StructureDefinition/us-quality-core-recorded').value as FHIR.dateTime\n\n/*\n@description: Returns the negated activity extent for a Procedure Not Done\n@seealso: [Negation In US Quality Core](negation.html)\n*/\ndefine fluent function code(procedureNotDone ProcedureNotDone):\n  procedureNotDone.code.toActivityExtent()\n\n/*\n@description: Returns the value of the recorded extension for a Medication Administration Not Done\n*/\ndefine fluent function reasonRefused(serviceNotRequested ServiceNotRequested):\n  serviceNotRequested.ext('http://fhir.org/guides/astp/us-quality-core/StructureDefinition/us-quality-core-doNotPerformReason').value as FHIR.CodeableConcept\n\n/*\n@description: Returns the negated activity extent for a Service Not Requested\n@seealso: [Negation In US Quality Core](negation.html)\n*/\ndefine fluent function code(serviceNotRequested ServiceNotRequested):\n  serviceNotRequested.code.toActivityExtent()\n\n/*\n@description: Returns the negated activity extent for a Task Rejected\n@seealso: [Negation In US Quality Core](negation.html)\n*/\ndefine fluent function code(taskRejected TaskRejected):\n  taskRejected.code.toActivityExtent()\n\n/*\n@description: Creates a list of integers from 1 to how many days are in the interval. Note, this wont create an index for\nthe final day if it is less than 24 hours. This also includes the first 24 hour period.\n*/\ndefine fluent function toDayNumbers(Period Interval&lt;DateTime&gt;):\n  ( expand { Interval[1, duration in days between start of Period and end of Period]} ) DayNumber\n    return end of DayNumber\n\n/*\n@description: Creates a list of 24 hour long intervals in an interval paired with the index (1 indexed) to which 24 hour interval it is.\nNote that the result will include intervals that are closed at the beginning and open at the end\n*/\ndefine fluent function daysInPeriod(Period Interval&lt;DateTime&gt;):\n  ( Period.toDayNumbers()) DayIndex\n    let startPeriod: start of Period + (24 hours * (DayIndex - 1)),\n    endPeriod: if (hours between startPeriod and end of Period &lt; 24) then startPeriod\n      else start of Period + (24 hours * DayIndex)\n    return Tuple {\n      dayIndex: DayIndex,\n      dayPeriod: Interval[startPeriod, endPeriod)\n    }\n  </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/USQualityCoreCommon",
  "version" : "0.1.0-cibuild",
  "name" : "USQualityCoreCommon",
  "title" : "US Quality Core Common",
  "status" : "active",
  "experimental" : false,
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library"
      }
    ]
  },
  "date" : "2025-10-02T13:51:38+00:00",
  "publisher" : "ICF",
  "description" : "Common terminologies and functions used in US Quality Core-based CQL artifacts",
  "topic" : [
    {
      "text" : "FHIR"
    },
    {
      "text" : "CQL"
    }
  ],
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "LyoKQGRlc2NyaXB0aW9uOiBDb21tb24gdGVybWlub2xvZ2llcyBhbmQgZnVuY3Rpb25zIHVzZWQgaW4gVVNRdWFsaXR5Q29yZS1iYXNlZCBDUUwgYXJ0aWZhY3RzCkBjb21tZW50OiBUaGUgbW9kZWxpbmZvIGluY2x1ZGVkIHdpdGggdGhlIHB1Ymxpc2hlZCBJRyBpcyB1c2luZyBbZGVyaXZlZCBtb2RlbGluZm9dKGh0dHBzOi8vaGw3Lm9yZy9maGlyL3V2L2NxbC91c2luZy1tb2RlbGluZm8uaHRtbCNkZXJpdmVkLW1vZGVsaW5mbykKdG8gZW5hYmxlIHJldXNlIG9mIGRhdGEgZWxlbWVudHMgYW5kIGxpYnJhcmllcyBkZWZpbmVkIGluIHRoZSBbVVMgQ29yZV0oaHR0cHM6Ly9obDcub3JnL2ZoaXIvdXMvY29yZSkgCmFuZCBbVVMgQ1FMXShodHRwczovL2hsNy5vcmcvZmhpci91cy9jcWwpIENvbW1vbiBJR3MuIFRoaXMgbGlicmFyeSBpcyBkZXJpdmVkIGZyb20gdGhlIFFJQ29yZUNvbW1vbiBzaGFyZWQgbGlicmFyeSB1c2VkIGluIEZISVItYmFzZWQgCnF1YWxpdHkgbWVhc3VyZSBzcGVjaWZpY2F0aW9ucy4gSG93ZXZlciwgbW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0eSB0aGF0IHdhcyBkZWZpbmVkIGluIFFJQ29yZUNvbW1vbiBpcyBub3cgZWl0aGVyIGluIFtGSElSQ29tbW9uXShodHRwczovL2hsNy5vcmcvZmhpci91di9jcWwvTGlicmFyeS1GSElSQ29tbW9uLmh0bWwpCm9yIFtVU0NvcmVDb21tb25dKGh0dHBzOi8vaGw3Lm9yZy9maGlyL3VzL2NxbC9MaWJyYXJ5LVVTQ29yZUNvbW1vbi5odG1sKS4KKi8KbGlicmFyeSBVU1F1YWxpdHlDb3JlQ29tbW9uIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCgppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkNvbW1vbiB2ZXJzaW9uICcyLjAuMCcKCmNvZGVzeXN0ZW0gIkFjdENvZGUiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS92My1BY3RDb2RlJwpjb2Rlc3lzdGVtICJUYXNrQ29kZVN5c3RlbSI6ICdodHRwOi8vaGw3Lm9yZy9maGlyL0NvZGVTeXN0ZW0vdGFzay1jb2RlJyAKY29kZXN5c3RlbSAiQWxsZXJneUludG9sZXJhbmNlQ2xpbmljYWxTdGF0dXNDb2RlcyI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL2FsbGVyZ3lpbnRvbGVyYW5jZS1jbGluaWNhbCcKY29kZXN5c3RlbSAiQWxsZXJneUludG9sZXJhbmNlVmVyaWZpY2F0aW9uU3RhdHVzQ29kZXMiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9hbGxlcmd5aW50b2xlcmFuY2UtdmVyaWZpY2F0aW9uJwoKLy8gQWxsZXJneS9JbnRvbGVyYW5jZSBWZXJpZmljYXRpb24gU3RhdHVzIENvZGVzIC0gQ29uc2lkZXIgdmFsdWUgc2V0cyBmb3IgdGhlc2UKY29kZSAiYWxsZXJneS11bmNvbmZpcm1lZCI6ICd1bmNvbmZpcm1lZCcgZnJvbSBBbGxlcmd5SW50b2xlcmFuY2VWZXJpZmljYXRpb25TdGF0dXNDb2RlcyBkaXNwbGF5ICdVbmNvbmZpcm1lZCcKY29kZSAiYWxsZXJneS1jb25maXJtZWQiOiAnY29uZmlybWVkJyBmcm9tIEFsbGVyZ3lJbnRvbGVyYW5jZVZlcmlmaWNhdGlvblN0YXR1c0NvZGVzIGRpc3BsYXkgJ0NvbmZpcm1lZCcKY29kZSAiYWxsZXJneS1yZWZ1dGVkIjogJ3JlZnV0ZWQnIGZyb20gQWxsZXJneUludG9sZXJhbmNlVmVyaWZpY2F0aW9uU3RhdHVzQ29kZXMgZGlzcGxheSAnUmVmdXRlZCcKY29kZSAiYWxsZXJneS1hY3RpdmUiOiAnYWN0aXZlJyBmcm9tIEFsbGVyZ3lJbnRvbGVyYW5jZUNsaW5pY2FsU3RhdHVzQ29kZXMgZGlzcGxheSAnQWN0aXZlJwoKLy8gRW5jb3VudGVyIENsYXNzIENvZGVzCmNvZGUgImFtYnVsYXRvcnkiOiAnQU1CJyBmcm9tIEFjdENvZGUgZGlzcGxheSAnYW1idWxhdG9yeScKY29kZSAiZW1lcmdlbmN5IjogJ0VNRVInIGZyb20gQWN0Q29kZSBkaXNwbGF5ICdlbWVyZ2VuY3knCmNvZGUgImZpZWxkIjogJ0ZMRCcgZnJvbSBBY3RDb2RlIGRpc3BsYXkgJ2ZpZWxkJwpjb2RlICJob21lIGhlYWx0aCI6ICdISCcgZnJvbSBBY3RDb2RlIGRpc3BsYXkgJ2hvbWUgaGVhbHRoJwpjb2RlICJpbnBhdGllbnQgZW5jb3VudGVyIjogJ0lNUCcgZnJvbSBBY3RDb2RlIGRpc3BsYXkgJ2lucGF0aWVudCBlbmNvdW50ZXInCmNvZGUgImlucGF0aWVudCBhY3V0ZSI6ICdBQ1VURScgZnJvbSBBY3RDb2RlIGRpc3BsYXkgJ2lucGF0aWVudCBhY3V0ZScKY29kZSAiaW5wYXRpZW50IG5vbi1hY3V0ZSI6ICdOT05BQycgZnJvbSBBY3RDb2RlIGRpc3BsYXkgJ2lucGF0aWVudCBub24tYWN1dGUnCmNvZGUgIm9ic2VydmF0aW9uIGVuY291bnRlciI6ICdPQlNFTkMnIGZyb20gQWN0Q29kZSBkaXNwbGF5ICdvYnNlcnZhdGlvbiBlbmNvdW50ZXInCmNvZGUgInByZS1hZG1pc3Npb24iOiAnUFJFTkMnIGZyb20gQWN0Q29kZSBkaXNwbGF5ICdwcmUtYWRtaXNzaW9uJwpjb2RlICJzaG9ydCBzdGF5IjogJ1NTJyBmcm9tIEFjdENvZGUgZGlzcGxheSAnc2hvcnQgc3RheScKY29kZSAidmlydHVhbCI6ICdWUicgZnJvbSBBY3RDb2RlIGRpc3BsYXkgJ1ZpcnR1YWwnCgovL1Rhc2sgY29kZXMKY29kZSAiRnVsZmlsbCI6ICdmdWxmaWxsJyBmcm9tICJUYXNrQ29kZVN5c3RlbSIgZGlzcGxheSAnRnVsZmlsbCcKCmNvbnRleHQgUGF0aWVudAoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgZ2l2ZW4gdXJpIChpLmUuIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3Qgc2xhc2gpCiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gZ2V0SWQodXJpIFN0cmluZyk6CiAgTGFzdChTcGxpdCh1cmksICcvJykpCgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgdGhlIFN5c3RlbS5WYWx1ZVNldCBpbnN0YW5jZSB3aXRoIHRoZSB1cmwgYW5kIHZlcnNpb24gKGlmIHByZXNlbnQpIG9mIHRoZSBnaXZlbiBjYW5vbmljYWwgcmVmZXJlbmNlCiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gdG9WYWx1ZVNldChjYW5vbmljYWwgRkhJUi5jYW5vbmljYWwpOgogIFN5c3RlbS5WYWx1ZVNldCB7CiAgICBpZDogY2Fub25pY2FsLnVybCgpLAogICAgdmVyc2lvbjogY2Fub25pY2FsLnZlcnNpb24oKQogIH0KCi8qCkBkZXNjcmlwdGlvbjogQ29udmVydHMgdGhlIGFjdGl2aXR5IGV4dGVudCBwYXR0ZXJuIHVzZWQgdG8gcmVwcmVzZW50IG5lZ2F0ZWQgYWN0aXZpdGllcyB0byBlaXRoZXIgYSBjb2RlYWJsZUNvbmNlcHQgb3IgYSB2YWx1ZSBzZXQKQHNlZWFsc286IFtOZWdhdGlvbiBJbiBVUyBRdWFsaXR5IENvcmVdKG5lZ2F0aW9uLmh0bWwpCiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gdG9BY3Rpdml0eUV4dGVudChjb2RlYWJsZUNvbmNlcHQgRkhJUi5Db2RlYWJsZUNvbmNlcHQpOgogIChjb2RlYWJsZUNvbmNlcHQuZXh0KCdodHRwOi8vZmhpci5vcmcvZ3VpZGVzL2FzdHAvdXMtcXVhbGl0eS1jb3JlL1N0cnVjdHVyZURlZmluaXRpb24vdXMtcXVhbGl0eS1jb3JlLW5vdERvbmVWYWx1ZVNldCcpLnZhbHVlKSBYCiAgICByZXR1cm4KICAgICAgaWYgWCBpcyBub3QgbnVsbCAKICAgICAgICB0aGVuIFgudG9WYWx1ZVNldCgpCiAgICAgICAgZWxzZSBjb2RlYWJsZUNvbmNlcHQKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHJlY29yZGVkIGV4dGVuc2lvbiBmb3IgYSBDb21tdW5pY2F0aW9uIE5vdCBEb25lCiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gcmVjb3JkZWQoY29tbXVuaWNhdGlvbk5vdERvbmUgQ29tbXVuaWNhdGlvbk5vdERvbmUpOgogIGNvbW11bmljYXRpb25Ob3REb25lLmV4dCgnaHR0cDovL2ZoaXIub3JnL2d1aWRlcy9hc3RwL3VzLXF1YWxpdHktY29yZS9TdHJ1Y3R1cmVEZWZpbml0aW9uL3VzLXF1YWxpdHktY29yZS1yZWNvcmRlZCcpLnZhbHVlIGFzIEZISVIuZGF0ZVRpbWUKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0aGUgbmVnYXRlZCBhY3Rpdml0eSBleHRlbnQgZm9yIGEgQ29tbXVuaWNhdGlvbiBOb3QgRG9uZQpAc2VlYWxzbzogW05lZ2F0aW9uIEluIFVTIFF1YWxpdHkgQ29yZV0obmVnYXRpb24uaHRtbCkKKi8KZGVmaW5lIGZsdWVudCBmdW5jdGlvbiB0b3BpYyhjb21tdW5pY2F0aW9uTm90RG9uZSBDb21tdW5pY2F0aW9uTm90RG9uZSk6CiAgY29tbXVuaWNhdGlvbk5vdERvbmUudG9waWMudG9BY3Rpdml0eUV4dGVudCgpCgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBkb05vdFBlcmZvcm1SZWFzb24gZXh0ZW5zaW9uIGZvciBhIERldmljZSBOb3QgUmVxdWVzdGVkCiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gZG9Ob3RQZXJmb3JtUmVhc29uKGRldmljZU5vdFJlcXVlc3RlZCBEZXZpY2VOb3RSZXF1ZXN0ZWQpOgogIGRldmljZU5vdFJlcXVlc3RlZC5leHQoJ2h0dHA6Ly9maGlyLm9yZy9ndWlkZXMvYXN0cC91cy1xdWFsaXR5LWNvcmUvU3RydWN0dXJlRGVmaW5pdGlvbi91cy1xdWFsaXR5LWNvcmUtZG9Ob3RQZXJmb3JtUmVhc29uJykudmFsdWUgYXMgRkhJUi5Db2RlYWJsZUNvbmNlcHQKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGRvTm90UGVyZm9ybSBleHRlbnNpb24gZm9yIGEgRGV2aWNlIE5vdCBSZXF1ZXN0ZWQKKi8KZGVmaW5lIGZsdWVudCBmdW5jdGlvbiBkb05vdFBlcmZvcm0oZGV2aWNlTm90UmVxdWVzdGVkIERldmljZU5vdFJlcXVlc3RlZCk6CiAgZGV2aWNlTm90UmVxdWVzdGVkLmV4dCgnaHR0cDovL2hsNy5vcmcvZmhpci81LjAvU3RydWN0dXJlRGVmaW5pdGlvbi9leHRlbnNpb24tRGV2aWNlUmVxdWVzdC5kb05vdFBlcmZvcm0nKS52YWx1ZSBhcyBGSElSLmJvb2xlYW4KCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0aGUgbmVnYXRlZCBhY3Rpdml0eSBleHRlbnQgZm9yIGEgRGV2aWNlIE5vdCBSZXF1ZXN0ZWQKQHNlZWFsc286IFtOZWdhdGlvbiBJbiBVUyBRdWFsaXR5IENvcmVdKG5lZ2F0aW9uLmh0bWwpCiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gY29kZShkZXZpY2VOb3RSZXF1ZXN0ZWQgRGV2aWNlTm90UmVxdWVzdGVkKToKICBkZXZpY2VOb3RSZXF1ZXN0ZWQuY29kZS50b0FjdGl2aXR5RXh0ZW50KCkKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGFiYXRlbWVudCBleHRlbnNpb24gZm9yIGEgRmFtaWx5TWVtYmVySGlzdG9yeQoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIGFiYXRlbWVudChmYW1pbHlNZW1iZXJIaXN0b3J5IEZhbWlseU1lbWJlckhpc3RvcnkpOgogIGZhbWlseU1lbWJlckhpc3RvcnkuZXh0KCdobDcub3JnL2ZoaXIvU3RydWN0dXJlRGVmaW5pdGlvbi9mYW1pbHltZW1iZXJoaXN0b3J5LWFiYXRlbWVudCcpLnZhbHVlIGFzIENob2ljZTxGSElSLmRhdGUsIEZISVIuQWdlLCBGSElSLmJvb2xlYW4+CgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBzZXZlcml0eSBleHRlbnNpb24gZm9yIGEgRmFtaWx5TWVtYmVySGlzdG9yeQoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIHNldmVyaXR5KGZhbWlseU1lbWJlckhpc3RvcnkgRmFtaWx5TWVtYmVySGlzdG9yeSk6CiAgZmFtaWx5TWVtYmVySGlzdG9yeS5leHQoJ2hsNy5vcmcvZmhpci9TdHJ1Y3R1cmVEZWZpbml0aW9uL2ZhbWlseW1lbWJlcmhpc3Rvcnktc2V2ZXJpdHknKS52YWx1ZSBhcyBGSElSLkNvZGVhYmxlQ29uY2VwdAoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRoZSBuZWdhdGVkIGFjdGl2aXR5IGV4dGVudCBmb3IgYW4gSW1tdW5pemF0aW9uIE5vdCBEb25lCkBzZWVhbHNvOiBbTmVnYXRpb24gSW4gVVMgUXVhbGl0eSBDb3JlXShuZWdhdGlvbi5odG1sKQoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIHZhY2NpbmVDb2RlKGltbXVuaXphdGlvbk5vdERvbmUgSW1tdW5pemF0aW9uTm90RG9uZSk6CiAgaW1tdW5pemF0aW9uTm90RG9uZS52YWNjaW5lQ29kZS50b0FjdGl2aXR5RXh0ZW50KCkKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHJlY29yZGVkIGV4dGVuc2lvbiBmb3IgYSBNZWRpY2F0aW9uIEFkbWluaXN0cmF0aW9uIE5vdCBEb25lCiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gcmVjb3JkZWQobWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uTm90RG9uZSBNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25Ob3REb25lKToKICBtZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25Ob3REb25lLmV4dCgnaHR0cDovL2ZoaXIub3JnL2d1aWRlcy9hc3RwL3VzLXF1YWxpdHktY29yZS9TdHJ1Y3R1cmVEZWZpbml0aW9uL3VzLXF1YWxpdHktY29yZS1yZWNvcmRlZCcpLnZhbHVlIGFzIEZISVIuZGF0ZVRpbWUKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0aGUgbmVnYXRlZCBhY3Rpdml0eSBleHRlbnQgZm9yIGEgTWVkaWNhdGlvbiBBZG1pbmlzdHJhdGlvbiBOb3QgRG9uZQpAc2VlYWxzbzogW05lZ2F0aW9uIEluIFVTIFF1YWxpdHkgQ29yZV0obmVnYXRpb24uaHRtbCkKKi8KZGVmaW5lIGZsdWVudCBmdW5jdGlvbiBtZWRpY2F0aW9uKG1lZGljYXRpb25BZG1pbmlzdHJhdGlvbk5vdERvbmUgTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uTm90RG9uZSk6CiAgbWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uTm90RG9uZS5tZWRpY2F0aW9uLnRvQWN0aXZpdHlFeHRlbnQoKQoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcmVjb3JkZWQgZXh0ZW5zaW9uIGZvciBhIE1lZGljYXRpb24gRGlzcGVuc2UgRGVjbGluZWQKKi8KZGVmaW5lIGZsdWVudCBmdW5jdGlvbiByZWNvcmRlZChtZWRpY2F0aW9uRGlzcGVuc2VEZWNsaW5lZCBNZWRpY2F0aW9uRGlzcGVuc2VEZWNsaW5lZCk6CiAgbWVkaWNhdGlvbkRpc3BlbnNlRGVjbGluZWQuZXh0KCdodHRwOi8vZmhpci5vcmcvZ3VpZGVzL2FzdHAvdXMtcXVhbGl0eS1jb3JlL1N0cnVjdHVyZURlZmluaXRpb24vdXMtcXVhbGl0eS1jb3JlLXJlY29yZGVkJykudmFsdWUgYXMgRkhJUi5kYXRlVGltZQoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRoZSBuZWdhdGVkIGFjdGl2aXR5IGV4dGVudCBmb3IgYSBNZWRpY2F0aW9uIERpc3BlbnNlIERlY2xpbmVkCkBzZWVhbHNvOiBbTmVnYXRpb24gSW4gVVMgUXVhbGl0eSBDb3JlXShuZWdhdGlvbi5odG1sKQoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIG1lZGljYXRpb24obWVkaWNhdGlvbkRpc3BlbnNlRGVjbGluZWQgTWVkaWNhdGlvbkRpc3BlbnNlRGVjbGluZWQpOgogIChtZWRpY2F0aW9uRGlzcGVuc2VEZWNsaW5lZC5tZWRpY2F0aW9uIGFzIEZISVIuQ29kZWFibGVDb25jZXB0KS50b0FjdGl2aXR5RXh0ZW50KCkKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0aGUgbmVnYXRlZCBhY3Rpdml0eSBleHRlbnQgZm9yIGEgTWVkaWNhdGlvbiBOb3QgUmVxdWVzdGVkCkBzZWVhbHNvOiBbTmVnYXRpb24gSW4gVVMgUXVhbGl0eSBDb3JlXShuZWdhdGlvbi5odG1sKQoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIG1lZGljYXRpb24obWVkaWNhdGlvbk5vdFJlcXVlc3RlZCBNZWRpY2F0aW9uTm90UmVxdWVzdGVkKToKICBtZWRpY2F0aW9uTm90UmVxdWVzdGVkLm1lZGljYXRpb24udG9BY3Rpdml0eUV4dGVudCgpCgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgdGhlIG5vdERvbmVSZWFzb24gZm9yIGFuIE9ic2VydmF0aW9uQ2FuY2VsbGVkCiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gbm90RG9uZVJlYXNvbihvYnNlcnZhdGlvbkNhbmNlbGxlZCBPYnNlcnZhdGlvbkNhbmNlbGxlZCk6CiAgb2JzZXJ2YXRpb25DYW5jZWxsZWQuZXh0KCdodHRwOi8vZmhpci5vcmcvZ3VpZGVzL2FzdHAvdXMtcXVhbGl0eS1jb3JlL1N0cnVjdHVyZURlZmluaXRpb24vdXMtcXVhbGl0eS1jb3JlLW5vdERvbmVSZWFzb24nKS52YWx1ZSBhcyBGSElSLkNvZGVhYmxlQ29uY2VwdAoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRoZSBuZWdhdGVkIGFjdGl2aXR5IGV4dGVudCBmb3IgYW4gT2JzZXJ2YXRpb25DYW5jZWxsZWQKQHNlZWFsc286IFtOZWdhdGlvbiBJbiBVUyBRdWFsaXR5IENvcmVdKG5lZ2F0aW9uLmh0bWwpCiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gY29kZShvYnNlcnZhdGlvbkNhbmNlbGxlZCBPYnNlcnZhdGlvbkNhbmNlbGxlZCk6CiAgb2JzZXJ2YXRpb25DYW5jZWxsZWQuY29kZS50b0FjdGl2aXR5RXh0ZW50KCkKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHJlY29yZGVkIGV4dGVuc2lvbiBmb3IgYSBQcm9jZWR1cmUKKi8KZGVmaW5lIGZsdWVudCBmdW5jdGlvbiByZWNvcmRlZChwcm9jZWR1cmUgUHJvY2VkdXJlKToKICBwcm9jZWR1cmUuZXh0KCdodHRwOi8vZmhpci5vcmcvZ3VpZGVzL2FzdHAvdXMtcXVhbGl0eS1jb3JlL1N0cnVjdHVyZURlZmluaXRpb24vdXMtcXVhbGl0eS1jb3JlLXJlY29yZGVkJykudmFsdWUgYXMgRkhJUi5kYXRlVGltZQoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcmVjb3JkZWQgZXh0ZW5zaW9uIGZvciBhIE1lZGljYXRpb24gQWRtaW5pc3RyYXRpb24gTm90IERvbmUKKi8KZGVmaW5lIGZsdWVudCBmdW5jdGlvbiByZWNvcmRlZChwcm9jZWR1cmVOb3REb25lIFByb2NlZHVyZU5vdERvbmUpOgogIHByb2NlZHVyZU5vdERvbmUuZXh0KCdodHRwOi8vZmhpci5vcmcvZ3VpZGVzL2FzdHAvdXMtcXVhbGl0eS1jb3JlL1N0cnVjdHVyZURlZmluaXRpb24vdXMtcXVhbGl0eS1jb3JlLXJlY29yZGVkJykudmFsdWUgYXMgRkhJUi5kYXRlVGltZQoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRoZSBuZWdhdGVkIGFjdGl2aXR5IGV4dGVudCBmb3IgYSBQcm9jZWR1cmUgTm90IERvbmUKQHNlZWFsc286IFtOZWdhdGlvbiBJbiBVUyBRdWFsaXR5IENvcmVdKG5lZ2F0aW9uLmh0bWwpCiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gY29kZShwcm9jZWR1cmVOb3REb25lIFByb2NlZHVyZU5vdERvbmUpOgogIHByb2NlZHVyZU5vdERvbmUuY29kZS50b0FjdGl2aXR5RXh0ZW50KCkKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHJlY29yZGVkIGV4dGVuc2lvbiBmb3IgYSBNZWRpY2F0aW9uIEFkbWluaXN0cmF0aW9uIE5vdCBEb25lCiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gcmVhc29uUmVmdXNlZChzZXJ2aWNlTm90UmVxdWVzdGVkIFNlcnZpY2VOb3RSZXF1ZXN0ZWQpOgogIHNlcnZpY2VOb3RSZXF1ZXN0ZWQuZXh0KCdodHRwOi8vZmhpci5vcmcvZ3VpZGVzL2FzdHAvdXMtcXVhbGl0eS1jb3JlL1N0cnVjdHVyZURlZmluaXRpb24vdXMtcXVhbGl0eS1jb3JlLWRvTm90UGVyZm9ybVJlYXNvbicpLnZhbHVlIGFzIEZISVIuQ29kZWFibGVDb25jZXB0CgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgdGhlIG5lZ2F0ZWQgYWN0aXZpdHkgZXh0ZW50IGZvciBhIFNlcnZpY2UgTm90IFJlcXVlc3RlZApAc2VlYWxzbzogW05lZ2F0aW9uIEluIFVTIFF1YWxpdHkgQ29yZV0obmVnYXRpb24uaHRtbCkKKi8KZGVmaW5lIGZsdWVudCBmdW5jdGlvbiBjb2RlKHNlcnZpY2VOb3RSZXF1ZXN0ZWQgU2VydmljZU5vdFJlcXVlc3RlZCk6CiAgc2VydmljZU5vdFJlcXVlc3RlZC5jb2RlLnRvQWN0aXZpdHlFeHRlbnQoKQoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRoZSBuZWdhdGVkIGFjdGl2aXR5IGV4dGVudCBmb3IgYSBUYXNrIFJlamVjdGVkCkBzZWVhbHNvOiBbTmVnYXRpb24gSW4gVVMgUXVhbGl0eSBDb3JlXShuZWdhdGlvbi5odG1sKQoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIGNvZGUodGFza1JlamVjdGVkIFRhc2tSZWplY3RlZCk6CiAgdGFza1JlamVjdGVkLmNvZGUudG9BY3Rpdml0eUV4dGVudCgpCgovKgpAZGVzY3JpcHRpb246IENyZWF0ZXMgYSBsaXN0IG9mIGludGVnZXJzIGZyb20gMSB0byBob3cgbWFueSBkYXlzIGFyZSBpbiB0aGUgaW50ZXJ2YWwuIE5vdGUsIHRoaXMgd29udCBjcmVhdGUgYW4gaW5kZXggZm9yCnRoZSBmaW5hbCBkYXkgaWYgaXQgaXMgbGVzcyB0aGFuIDI0IGhvdXJzLiBUaGlzIGFsc28gaW5jbHVkZXMgdGhlIGZpcnN0IDI0IGhvdXIgcGVyaW9kLgoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIHRvRGF5TnVtYmVycyhQZXJpb2QgSW50ZXJ2YWw8RGF0ZVRpbWU+KToKICAoIGV4cGFuZCB7IEludGVydmFsWzEsIGR1cmF0aW9uIGluIGRheXMgYmV0d2VlbiBzdGFydCBvZiBQZXJpb2QgYW5kIGVuZCBvZiBQZXJpb2RdfSApIERheU51bWJlcgogICAgcmV0dXJuIGVuZCBvZiBEYXlOdW1iZXIKCi8qCkBkZXNjcmlwdGlvbjogQ3JlYXRlcyBhIGxpc3Qgb2YgMjQgaG91ciBsb25nIGludGVydmFscyBpbiBhbiBpbnRlcnZhbCBwYWlyZWQgd2l0aCB0aGUgaW5kZXggKDEgaW5kZXhlZCkgdG8gd2hpY2ggMjQgaG91ciBpbnRlcnZhbCBpdCBpcy4KTm90ZSB0aGF0IHRoZSByZXN1bHQgd2lsbCBpbmNsdWRlIGludGVydmFscyB0aGF0IGFyZSBjbG9zZWQgYXQgdGhlIGJlZ2lubmluZyBhbmQgb3BlbiBhdCB0aGUgZW5kCiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gZGF5c0luUGVyaW9kKFBlcmlvZCBJbnRlcnZhbDxEYXRlVGltZT4pOgogICggUGVyaW9kLnRvRGF5TnVtYmVycygpKSBEYXlJbmRleAogICAgbGV0IHN0YXJ0UGVyaW9kOiBzdGFydCBvZiBQZXJpb2QgKyAoMjQgaG91cnMgKiAoRGF5SW5kZXggLSAxKSksCiAgICBlbmRQZXJpb2Q6IGlmIChob3VycyBiZXR3ZWVuIHN0YXJ0UGVyaW9kIGFuZCBlbmQgb2YgUGVyaW9kIDwgMjQpIHRoZW4gc3RhcnRQZXJpb2QKICAgICAgZWxzZSBzdGFydCBvZiBQZXJpb2QgKyAoMjQgaG91cnMgKiBEYXlJbmRleCkKICAgIHJldHVybiBUdXBsZSB7CiAgICAgIGRheUluZGV4OiBEYXlJbmRleCwKICAgICAgZGF5UGVyaW9kOiBJbnRlcnZhbFtzdGFydFBlcmlvZCwgZW5kUGVyaW9kKQogICAgfQogIA==",
      "url" : "https://madie.cms.gov/Library-USQualityCoreCommon.cql"
    }
  ]
}