<?xml version="1.0" encoding="UTF-8"?>

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


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


</tr>







<tr>


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



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


</tr>
















<tr>


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



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


</tr>







































<tr>


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



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


</td>


</tr>













<tr>


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


</tr>


<tr>


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



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


</tr>








  <tr>


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


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

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

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

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

codesystem &quot;SNOMEDCT&quot;: 'http://snomed.info/sct'

valueset &quot;Androgen Deprivation Therapy for Urology Care&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1248.352'
valueset &quot;DEXA Bone Density for Urology Care&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1248.359'
valueset &quot;Office Visit&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001'
valueset &quot;Patient Declined&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1582'
valueset &quot;Prostate Cancer&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.319'

code &quot;Injection of leuprolide acetate for twelve month period (regime/therapy)&quot;: '456381000124102' from &quot;SNOMEDCT&quot; display 'Injection of leuprolide acetate for twelve month period (regime/therapy)'

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

context Patient

define &quot;Initial Population&quot;:
  &quot;Has Qualifying Encounter&quot;
    and exists &quot;Order for 12 Months of ADT in 3 Months Before to 9 Months After Start of Measurement Period&quot;

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

define &quot;Numerator&quot;:
  &quot;Has Baseline DEXA Scan Two Years Prior to the Start of or Less than Three Months After the Start of ADT&quot;

define &quot;Denominator Exception&quot;:
  exists ( &quot;No Bone Density Scan Ordered Due to Patient Refusal&quot; )
    or exists ( &quot;No Bone Density Scan Performed Due to Patient Refusal&quot; )

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

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

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

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

define &quot;Has Baseline DEXA Scan Two Years Prior to the Start of or Less than Three Months After the Start of ADT&quot;:
  exists ( ( [ServiceRequest: &quot;DEXA Bone Density for Urology Care&quot;] DEXAOrdered
        with &quot;Order for 12 Months of ADT in 3 Months Before to 9 Months After Start of Measurement Period&quot; OrderTwelveMonthsADT
          such that DEXAOrdered.authoredOn 3 months or less on or after day of OrderTwelveMonthsADT.authoredOn
            or DEXAOrdered.authoredOn 2 years or less before day of OrderTwelveMonthsADT.authoredOn
        where DEXAOrdered.status in { 'active', 'completed' }
          and DEXAOrdered.intent = 'order'
    )
      union ( [ObservationClinicalResult: &quot;DEXA Bone Density for Urology Care&quot;] DEXAPerformed
          with &quot;Order for 12 Months of ADT in 3 Months Before to 9 Months After Start of Measurement Period&quot; OrderTwelveMonthsADT
            such that DEXAPerformed.effective.toInterval ( ) 3 months or less on or after day of OrderTwelveMonthsADT.authoredOn
              or DEXAPerformed.effective.toInterval ( ) 2 years or less before day of OrderTwelveMonthsADT.authoredOn
          where DEXAPerformed.status in { 'final', 'amended', 'corrected' }
      )
  )

define &quot;No Bone Density Scan Ordered Due to Patient Refusal&quot;:
  [ServiceNotRequested: &quot;DEXA Bone Density for Urology Care&quot;] DEXANotOrdered
    with &quot;Order for 12 Months of ADT in 3 Months Before to 9 Months After Start of Measurement Period&quot; OrderTwelveMonthsADT
      such that DEXANotOrdered.authoredOn 3 months or less on or after day of OrderTwelveMonthsADT.authoredOn
        and DEXANotOrdered.reasonRefused ( ) in &quot;Patient Declined&quot;

define &quot;No Bone Density Scan Performed Due to Patient Refusal&quot;:
  [ObservationCancelled: &quot;DEXA Bone Density for Urology Care&quot;] DEXANotPerformed
    with &quot;Order for 12 Months of ADT in 3 Months Before to 9 Months After Start of Measurement Period&quot; OrderTwelveMonthsADT
      such that DEXANotPerformed.issued 3 months or less on or after day of OrderTwelveMonthsADT.authoredOn
        and DEXANotPerformed.notDoneReason ( ) in &quot;Patient Declined&quot;

define &quot;First ADT in 3 Months Before to 9 Months After Start of Measurement Period&quot;:
  First((&quot;Androgen Deprivation Therapy for Urology Care Medication Active Start Dates&quot;
      union &quot;Androgen Deprivation Therapy for Urology Care Medication Order Start Dates&quot;) ADTDateTime
      with &quot;Prostate Cancer Diagnosis&quot; ProstateCancer
        such that ADTDateTime during day of ProstateCancer.prevalenceInterval ( )
          and ADTDateTime during day of Interval[start of &quot;Measurement Period&quot; - 3 months, start of &quot;Measurement Period&quot; + 9 months]
      sort ascending
  )

define &quot;Order for 12 Months of ADT in 3 Months Before to 9 Months After Start of Measurement Period&quot;:
  [ServiceRequest: &quot;Injection of leuprolide acetate for twelve month period (regime/therapy)&quot;] OrderTwelveMonthADT
    with &quot;First ADT in 3 Months Before to 9 Months After Start of Measurement Period&quot; FirstADTMP
      such that OrderTwelveMonthADT.authoredOn on or after day of FirstADTMP
        and OrderTwelveMonthADT.authoredOn during day of Interval[start of &quot;Measurement Period&quot; - 3 months, start of &quot;Measurement Period&quot; + 9 months]
        and OrderTwelveMonthADT.status in { 'active', 'completed' }
        and OrderTwelveMonthADT.intent = 'order'

define &quot;Androgen Deprivation Therapy for Urology Care Medication Active Start Dates&quot;:
  [MedicationRequest: &quot;Androgen Deprivation Therapy for Urology Care&quot;] ADTActive
    let firstMedicationPeriod: First((collapse(ADTActive.dosageInstruction.timing.repeat.bounds DoseTime
          return DoseTime.toInterval()
      )) DrugPeriods
        sort by start of $this
    ),

    //get the very first event as interval
    
    firstMedicationEvent: First((ADTActive.dosageInstruction.timing dosageTiming
        //returns first event for the specific dosageTiming
        
        return First(dosageTiming.event.value dosageTimingEvents
            sort ascending
        )) firstEvents
        sort ascending
    ),
    medicationDateTime: Min({ firstMedicationEvent, start of firstMedicationPeriod, 
      end of firstMedicationPeriod }
    )
    where ADTActive.status in { 'active', 'completed' }
      and ADTActive.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }
    return medicationDateTime

define &quot;Androgen Deprivation Therapy for Urology Care Medication Order Start Dates&quot;:
  [MedicationRequest: &quot;Androgen Deprivation Therapy for Urology Care&quot;] ADTOrder
    let firstMedicationPeriod: First((collapse(ADTOrder.dosageInstruction.timing.repeat.bounds DoseTime
          return DoseTime.toInterval()
      )) DrugPeriods
        sort by start of $this
    ),
    medicationDateTime: Min({ ADTOrder.authoredOn, start of firstMedicationPeriod, 
      end of firstMedicationPeriod }
    )
    where ADTOrder.status in { 'active', 'completed' }
      and ADTOrder.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }
    return medicationDateTime

define &quot;Has Qualifying Encounter&quot;:
  exists ( [&quot;Encounter&quot;: &quot;Office Visit&quot;] OfficeVisit
      where OfficeVisit.period during day of &quot;Measurement Period&quot;
        and OfficeVisit.status = 'finished'
  )

define &quot;Prostate Cancer Diagnosis&quot;:
  (
    // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)
    // Original:
    //   ( [ConditionProblemsHealthConcerns: &quot;Prostate Cancer&quot;]
    //     union [ConditionEncounterDiagnosis: &quot;Prostate Cancer&quot;] )
    [FHIR.Condition: &quot;Prostate Cancer&quot;] ) ProstateCancer
    where ProstateCancer.prevalenceInterval ( ) overlaps day of &quot;Measurement Period&quot;
      and ProstateCancer.isVerified ( )

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


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



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

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