WHO SMART Guidelines - HIV
0.4.3 - ci-build
WHO SMART Guidelines - HIV - Local Development build (v0.4.3) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
Draft as of 2025-02-07 |
<Library xmlns="http://hl7.org/fhir">
<id value="HIVIND12Logic"/>
<meta>
<profile
value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"/>
<profile
value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"/>
<profile
value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"/>
<profile
value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"/>
</meta>
<text>
<status value="extensions"/>
<div xmlns="http://www.w3.org/1999/xhtml">
<div>
<table class="grid dict">
<tr>
<th scope="row"><b>Title: </b></th>
<td style="padding-left: 4px;">HIV.IND.12 Logic</td>
</tr>
<tr>
<th scope="row"><b>Id: </b></th>
<td style="padding-left: 4px;">HIVIND12Logic</td>
</tr>
<tr>
<th scope="row"><b>Version: </b></th>
<td style="padding-left: 4px;">0.4.3</td>
</tr>
<tr>
<th scope="row"><b>Url: </b></th>
<td style="padding-left: 4px;"><a href="Library-HIVIND12Logic.html">HIV.IND.12 Logic</a></td>
</tr>
<tr>
<th scope="row"><b>Status: </b></th>
<td style="padding-left: 4px;">draft</td>
</tr>
<tr>
<th scope="row"><b>Experimental: </b></th>
<td style="padding-left: 4px;">true</td>
</tr>
<tr>
<th scope="row"><b>Type: </b></th>
<td style="padding-left: 4px;">
<p style="margin-bottom: 5px;">
<b>system: </b> <span><a href="http://terminology.hl7.org/6.0.2/CodeSystem-library-type.html">http://terminology.hl7.org/CodeSystem/library-type</a></span>
</p>
<p style="margin-bottom: 5px;">
<b>code: </b> <span>logic-library</span>
</p>
</td>
</tr>
<tr>
<th scope="row"><b>Date: </b></th>
<td style="padding-left: 4px;">2025-02-07 14:15:45+0000</td>
</tr>
<tr>
<th scope="row"><b>Publisher: </b></th>
<td style="padding-left: 4px;">WHO</td>
</tr>
<tr>
<th scope="row"><b>Description: </b></th>
<td style="padding-left: 4px;"><div><p>% of person-years of follow-up (PYFU) on OAMT among opioid dependent people</p>
</div></td>
</tr>
<tr>
<td colspan="2">
<table>
<tr><th><a id="cql-content"><b>Content: </b></a> text/cql</th></tr>
<tr><td><pre><code class="language-cql">/**
* Library: HIV.IND.12 Logic
* Ref No: PRV.12
* Short Name: Total person-years on OAMT
*
* Definition: % of person-years of follow-up (PYFU) on OAMT among opioid dependent people
*
* Numerator: Total PYFU on OAMT during defined reporting period. | Calculated from the sum of the time on OAMT of each OAMT recipient during the reporting period.
* Numerator Calculation: SUM of [DIFFERENCE in MIN("Date OAMT initiated", "Reporting period start date") and MAX("Date of loss to follow-up or OAMT stopped", "Reporting period end date")] for all clients with "Medications prescribed" IN 'Methadone', 'Buprenorphine'
* Numerator Exclusions:
*
* Denominator: a) Programme/service provider level: estimated PYFU for all opioid dependent people accessing service during defined reporting period | b) Population level: estimated PYFU for total population of opioid dependent people in relevant geographic area during defined reporting period
* Denominator Calculation: Service level: Not calculated in DAK | | Population denominator: | *Estimated PYFU for all opioid-dependent people accessing service during defined reporting period | | Note: Can be reported only as numerator; by population or service level if these denominator estimates available.
* Denominator Exclusions:
*
* Disaggregations:
* • Gender (female, male, other*)
* • Age (15–19, 20–24, 25–49, 50+ years)
* • Provider type (key population-led or community-led organization, public sector provider, other entities such as private for-profit and not-for-profit organizations, including faith-based, international, nongovernmental)
* • Setting: facility-based service (including hospitals, health clinics, general practice offices, etc.) or community-based service (including drop-in centres, community service delivery points, mobile clinics or vans, outreach teams, community support groups, etc.)
* • Cities and other administrative regions of epidemiologic importance
*
* Disaggregation Elements: Gender | Age
*
* Numerator and Denominator Elements:
* Date OAMT initiated
* Date of loss to follow-up or OAMT stopped
* Medications prescribed
* Reporting period end date
* Reporting period start date
*
* Reference: Consolidated guidelines on person-centred HIV strategic information: strengthening routine data for impact. Geneva: World Health Organization; 2022
*
* Data Concepts:
* HIV.A.DE17: Age | Calculated age (number of years) of the client based on date of birth
* HIV.A.DE18: Gender* | Gender of the client*
* HIV.A.DE19: Female | Client identifies as female
* HIV.A.DE20: Male | Client identifies as male
* HIV.A.DE21: Transgender male | Client identifies as transgender male
* HIV.A.DE22: Transgender female | Client identifies as transgender female
* HIV.A.DE23: Other | Additional category
* HIV.C.DE75: Medications prescribed | Medications the client was prescribed
* HIV.C.DE76: PrEP for HIV prevention | Client was prescribed pre-exposure prophylaxis (PrEP) for HIV prevention
* HIV.C.DE77: PEP for HIV prevention | Client was prescribed post-exposure prophylaxis (PEP) for HIV prevention
* HIV.C.DE78: Other | Client was prescribed other medications
* HIV.D.DE457: Medications prescribed | Name or regimen code of all other medications prescribed during the visit
* HIV.PRV.DE17: Date OAMT initiated | Date client initiated opioid agonist maintenance treatment (OAMT)
* HIV.PRV.DE25: Date of loss to follow-up or OAMT stopped | Date of loss to follow-up or opioid agonist maintenance treatment (OAMT) stopped
* HIV.Config.DE20: Reporting period end date | End date of the reporting period
* HIV.Config.DE21: Reporting period start date | Start date of the reporting period
*
* Additional Context
* - what it measures: Measure of the proportion of person time in which individuals who are opioid dependent are covered by OAMT.
* - rationale: Evidence demonstrates that HIV risk is reduced among individuals who are opioid dependent during periods when receiving OAMT.
* - method: Individual-level data obtained from programme records.
*
* Suggested Scoring Method: proportion | http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/proportion-measure-cqfm
*/
library HIVIND12Logic
// Included Libraries
using FHIR version '4.0.1'
include HIVCommon version '0.0.1' called HIC
include FHIRHelpers version '4.0.1'
include WHOCommon called WCom
include HIVElements called HE
include HIVIndicatorElements called HIE
// Indicator Definition
parameter "Measurement Period" Interval<DateTime> default Interval[@2023-01-01, @2023-01-30]
context Patient
/* Populations */
/*
*Initial Population
*/
define "Initial Population":
true
/**
* Numerator
*
* Definition: Total PYFU on OAMT during defined reporting period. | Calculated from the sum of the time on OAMT of each OAMT recipient during the reporting period.
* Calculation: SUM of [DIFFERENCE in MIN("Date OAMT initiated", "Reporting period start date") and MAX("Date of loss to follow-up or OAMT stopped", "Reporting period end date")] for all clients with "Medications prescribed" IN 'Methadone', 'Buprenorphine'
*/
define "Measure Population":
exists(HIE."buprenorphine_prescribed at date") or exists(HIE."methadone_prescribed at date")
define "Measure Observation":
(
difference in days between
Min(
{
ToDate(First(HIE."OAMT start")),
ToDate(start of "Measurement Period")
}
)
and ToDate(start of "Measurement Period")
)
+
(
difference in days between end of "Measurement Period"
and Coalesce(
ToDate(First(HIE."OAMT end")),
end of "Measurement Period"
)
)
/**
* Denominator
*
* Definition: a) Programme/service provider level: estimated PYFU for all opioid dependent people accessing service during defined reporting period | b) Population level: estimated PYFU for total population of opioid dependent people in relevant geographic area during defined reporting period
* Calculation: Service level: Not calculated in DAK | | Population denominator: | *Estimated PYFU for all opioid-dependent people accessing service during defined reporting period | | Note: Can be reported only as numerator; by population or service level if these denominator estimates available.
*/
/* end Populations */
</code></pre></td></tr>
</table>
</td>
</tr>
</table>
</div>
</div>
</text>
<extension
url="http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability">
<valueCode value="computable"/>
</extension>
<url value="http://smart.who.int/hiv/Library/HIVIND12Logic"/>
<version value="0.4.3"/>
<name value="HIVIND12Logic"/>
<title value="HIV.IND.12 Logic"/>
<status value="draft"/>
<experimental value="true"/>
<type>
<coding>
<system value="http://terminology.hl7.org/CodeSystem/library-type"/>
<code value="logic-library"/>
</coding>
</type>
<date value="2025-02-07T14:15:45+00:00"/>
<publisher value="WHO"/>
<contact>
<name value="WHO"/>
<telecom>
<system value="url"/>
<value value="http://who.int"/>
</telecom>
</contact>
<description
value="% of person-years of follow-up (PYFU) on OAMT among opioid dependent people"/>
<content>
<contentType value="text/cql"/>
<data
value="LyoqCiAqIExpYnJhcnk6IEhJVi5JTkQuMTIgTG9naWMKICogUmVmIE5vOiBQUlYuMTIKICogU2hvcnQgTmFtZTogVG90YWwgcGVyc29uLXllYXJzIG9uIE9BTVQKICoKICogRGVmaW5pdGlvbjogJSBvZiBwZXJzb24teWVhcnMgb2YgZm9sbG93LXVwIChQWUZVKSBvbiBPQU1UIGFtb25nIG9waW9pZCBkZXBlbmRlbnQgcGVvcGxlCiAqCiAqIE51bWVyYXRvcjogVG90YWwgUFlGVSBvbiBPQU1UIGR1cmluZyBkZWZpbmVkIHJlcG9ydGluZyBwZXJpb2QuIHwgQ2FsY3VsYXRlZCBmcm9tIHRoZSBzdW0gb2YgdGhlIHRpbWUgb24gT0FNVCBvZiBlYWNoIE9BTVQgcmVjaXBpZW50IGR1cmluZyB0aGUgcmVwb3J0aW5nIHBlcmlvZC4KICogTnVtZXJhdG9yIENhbGN1bGF0aW9uOiBTVU0gb2YgW0RJRkZFUkVOQ0UgaW4gTUlOKCJEYXRlIE9BTVQgaW5pdGlhdGVkIiwgIlJlcG9ydGluZyBwZXJpb2Qgc3RhcnQgZGF0ZSIpIGFuZCBNQVgoIkRhdGUgb2YgbG9zcyB0byBmb2xsb3ctdXAgb3IgT0FNVCBzdG9wcGVkIiwgIlJlcG9ydGluZyBwZXJpb2QgZW5kIGRhdGUiKV0gZm9yIGFsbCBjbGllbnRzIHdpdGggIk1lZGljYXRpb25zIHByZXNjcmliZWQiIElOICdNZXRoYWRvbmUnLCAnQnVwcmVub3JwaGluZScKICogTnVtZXJhdG9yIEV4Y2x1c2lvbnM6IAogKgogKiBEZW5vbWluYXRvcjogYSkgUHJvZ3JhbW1lL3NlcnZpY2UgcHJvdmlkZXIgbGV2ZWw6IGVzdGltYXRlZCBQWUZVIGZvciBhbGwgb3Bpb2lkIGRlcGVuZGVudCBwZW9wbGUgYWNjZXNzaW5nIHNlcnZpY2UgZHVyaW5nIGRlZmluZWQgcmVwb3J0aW5nIHBlcmlvZCB8IGIpIFBvcHVsYXRpb24gbGV2ZWw6IGVzdGltYXRlZCBQWUZVIGZvciB0b3RhbCBwb3B1bGF0aW9uIG9mIG9waW9pZCBkZXBlbmRlbnQgcGVvcGxlIGluIHJlbGV2YW50IGdlb2dyYXBoaWMgYXJlYSBkdXJpbmcgZGVmaW5lZCByZXBvcnRpbmcgcGVyaW9kCiAqIERlbm9taW5hdG9yIENhbGN1bGF0aW9uOiBTZXJ2aWNlIGxldmVsOiBOb3QgY2FsY3VsYXRlZCBpbiBEQUsgfCAgfCBQb3B1bGF0aW9uIGRlbm9taW5hdG9yOiAgfCAqRXN0aW1hdGVkIFBZRlUgZm9yIGFsbCBvcGlvaWQtZGVwZW5kZW50IHBlb3BsZSBhY2Nlc3Npbmcgc2VydmljZSBkdXJpbmcgZGVmaW5lZCByZXBvcnRpbmcgcGVyaW9kIHwgIHwgTm90ZTogQ2FuIGJlIHJlcG9ydGVkIG9ubHkgYXMgbnVtZXJhdG9yOyBieSBwb3B1bGF0aW9uIG9yIHNlcnZpY2UgbGV2ZWwgaWYgdGhlc2UgZGVub21pbmF0b3IgZXN0aW1hdGVzIGF2YWlsYWJsZS4KICogRGVub21pbmF0b3IgRXhjbHVzaW9uczogCiAqCiAqIERpc2FnZ3JlZ2F0aW9uczoKICog4oCiIEdlbmRlciAoZmVtYWxlLCBtYWxlLCBvdGhlciopIAogKiAg4oCiIEFnZSAoMTXigJMxOSwgMjDigJMyNCwgMjXigJM0OSwgNTArIHllYXJzKSAKICogIOKAoiBQcm92aWRlciB0eXBlIChrZXkgcG9wdWxhdGlvbi1sZWQgb3IgY29tbXVuaXR5LWxlZCBvcmdhbml6YXRpb24sIHB1YmxpYyBzZWN0b3IgcHJvdmlkZXIsIG90aGVyIGVudGl0aWVzIHN1Y2ggYXMgcHJpdmF0ZSBmb3ItcHJvZml0IGFuZCBub3QtZm9yLXByb2ZpdCBvcmdhbml6YXRpb25zLCBpbmNsdWRpbmcgZmFpdGgtYmFzZWQsIGludGVybmF0aW9uYWwsIG5vbmdvdmVybm1lbnRhbCkgCiAqICDigKIgU2V0dGluZzogZmFjaWxpdHktYmFzZWQgc2VydmljZSAoaW5jbHVkaW5nIGhvc3BpdGFscywgaGVhbHRoIGNsaW5pY3MsIGdlbmVyYWwgcHJhY3RpY2Ugb2ZmaWNlcywgZXRjLikgb3IgY29tbXVuaXR5LWJhc2VkIHNlcnZpY2UgKGluY2x1ZGluZyBkcm9wLWluIGNlbnRyZXMsIGNvbW11bml0eSBzZXJ2aWNlIGRlbGl2ZXJ5IHBvaW50cywgbW9iaWxlIGNsaW5pY3Mgb3IgdmFucywgb3V0cmVhY2ggdGVhbXMsIGNvbW11bml0eSBzdXBwb3J0IGdyb3VwcywgZXRjLikgCiAqICDigKLCoENpdGllcyBhbmQgb3RoZXIgYWRtaW5pc3RyYXRpdmUgcmVnaW9ucyBvZiBlcGlkZW1pb2xvZ2ljIGltcG9ydGFuY2UKICoKICogRGlzYWdncmVnYXRpb24gRWxlbWVudHM6IEdlbmRlciB8IEFnZQogKgogKiBOdW1lcmF0b3IgYW5kIERlbm9taW5hdG9yIEVsZW1lbnRzOgogKiBEYXRlIE9BTVQgaW5pdGlhdGVkIAogKiAgRGF0ZSBvZiBsb3NzIHRvIGZvbGxvdy11cCBvciBPQU1UIHN0b3BwZWQgCiAqICBNZWRpY2F0aW9ucyBwcmVzY3JpYmVkIAogKiAgUmVwb3J0aW5nIHBlcmlvZCBlbmQgZGF0ZSAKICogIFJlcG9ydGluZyBwZXJpb2Qgc3RhcnQgZGF0ZQogKgogKiBSZWZlcmVuY2U6IENvbnNvbGlkYXRlZCBndWlkZWxpbmVzIG9uIHBlcnNvbi1jZW50cmVkIEhJViBzdHJhdGVnaWMgaW5mb3JtYXRpb246IHN0cmVuZ3RoZW5pbmcgcm91dGluZSBkYXRhIGZvciBpbXBhY3QuIEdlbmV2YTogV29ybGQgSGVhbHRoIE9yZ2FuaXphdGlvbjsgMjAyMgogKiAKICogRGF0YSBDb25jZXB0czoKICogSElWLkEuREUxNzogQWdlIHwgQ2FsY3VsYXRlZCBhZ2UgKG51bWJlciBvZiB5ZWFycykgb2YgdGhlIGNsaWVudCBiYXNlZCBvbiBkYXRlIG9mIGJpcnRoCiAqIEhJVi5BLkRFMTg6IEdlbmRlciogfCBHZW5kZXIgb2YgdGhlIGNsaWVudCoKICogSElWLkEuREUxOTogRmVtYWxlIHwgQ2xpZW50IGlkZW50aWZpZXMgYXMgZmVtYWxlCiAqIEhJVi5BLkRFMjA6IE1hbGUgfCBDbGllbnQgaWRlbnRpZmllcyBhcyBtYWxlCiAqIEhJVi5BLkRFMjE6IFRyYW5zZ2VuZGVyIG1hbGUgfCBDbGllbnQgaWRlbnRpZmllcyBhcyB0cmFuc2dlbmRlciBtYWxlCiAqIEhJVi5BLkRFMjI6IFRyYW5zZ2VuZGVyIGZlbWFsZSB8IENsaWVudCBpZGVudGlmaWVzIGFzIHRyYW5zZ2VuZGVyIGZlbWFsZQogKiBISVYuQS5ERTIzOiBPdGhlciB8IEFkZGl0aW9uYWwgY2F0ZWdvcnkKICogSElWLkMuREU3NTogTWVkaWNhdGlvbnMgcHJlc2NyaWJlZCB8IE1lZGljYXRpb25zIHRoZSBjbGllbnQgd2FzIHByZXNjcmliZWQKICogSElWLkMuREU3NjogUHJFUCBmb3IgSElWIHByZXZlbnRpb24gfCBDbGllbnQgd2FzIHByZXNjcmliZWQgcHJlLWV4cG9zdXJlIHByb3BoeWxheGlzIChQckVQKSBmb3IgSElWIHByZXZlbnRpb24KICogSElWLkMuREU3NzogUEVQIGZvciBISVYgcHJldmVudGlvbiB8IENsaWVudCB3YXMgcHJlc2NyaWJlZCBwb3N0LWV4cG9zdXJlIHByb3BoeWxheGlzIChQRVApIGZvciBISVYgcHJldmVudGlvbgogKiBISVYuQy5ERTc4OiBPdGhlciB8IENsaWVudCB3YXMgcHJlc2NyaWJlZCBvdGhlciBtZWRpY2F0aW9ucwogKiBISVYuRC5ERTQ1NzogTWVkaWNhdGlvbnMgcHJlc2NyaWJlZCB8IE5hbWUgb3IgcmVnaW1lbiBjb2RlIG9mIGFsbCBvdGhlciBtZWRpY2F0aW9ucyBwcmVzY3JpYmVkIGR1cmluZyB0aGUgdmlzaXQKICogSElWLlBSVi5ERTE3OiBEYXRlIE9BTVQgaW5pdGlhdGVkIHwgRGF0ZSBjbGllbnQgaW5pdGlhdGVkIG9waW9pZCBhZ29uaXN0IG1haW50ZW5hbmNlIHRyZWF0bWVudCAoT0FNVCkKICogSElWLlBSVi5ERTI1OiBEYXRlIG9mIGxvc3MgdG8gZm9sbG93LXVwIG9yIE9BTVQgc3RvcHBlZCB8IERhdGUgb2YgbG9zcyB0byBmb2xsb3ctdXAgb3Igb3Bpb2lkIGFnb25pc3QgbWFpbnRlbmFuY2UgdHJlYXRtZW50IChPQU1UKSBzdG9wcGVkCiAqIEhJVi5Db25maWcuREUyMDogUmVwb3J0aW5nIHBlcmlvZCBlbmQgZGF0ZSB8IEVuZCBkYXRlIG9mIHRoZSByZXBvcnRpbmcgcGVyaW9kCiAqIEhJVi5Db25maWcuREUyMTogUmVwb3J0aW5nIHBlcmlvZCBzdGFydCBkYXRlIHwgU3RhcnQgZGF0ZSBvZiB0aGUgcmVwb3J0aW5nIHBlcmlvZAogKgogKiBBZGRpdGlvbmFsIENvbnRleHQKICogLSB3aGF0IGl0IG1lYXN1cmVzOiBNZWFzdXJlIG9mIHRoZSBwcm9wb3J0aW9uIG9mIHBlcnNvbiB0aW1lIGluIHdoaWNoIGluZGl2aWR1YWxzIHdobyBhcmUgb3Bpb2lkIGRlcGVuZGVudCBhcmUgY292ZXJlZCBieSBPQU1ULgogKiAtIHJhdGlvbmFsZTogRXZpZGVuY2UgZGVtb25zdHJhdGVzIHRoYXQgSElWIHJpc2sgaXMgcmVkdWNlZCBhbW9uZyBpbmRpdmlkdWFscyB3aG8gYXJlIG9waW9pZCBkZXBlbmRlbnQgZHVyaW5nIHBlcmlvZHMgd2hlbiByZWNlaXZpbmcgT0FNVC4KICogLSBtZXRob2Q6IEluZGl2aWR1YWwtbGV2ZWwgZGF0YSBvYnRhaW5lZCBmcm9tIHByb2dyYW1tZSByZWNvcmRzLgogKiAKICogU3VnZ2VzdGVkIFNjb3JpbmcgTWV0aG9kOiBwcm9wb3J0aW9uIHwgaHR0cDovL2hsNy5vcmcvZmhpci91cy9jcWZtZWFzdXJlcy9TdHJ1Y3R1cmVEZWZpbml0aW9uL3Byb3BvcnRpb24tbWVhc3VyZS1jcWZtCiAqLwoKbGlicmFyeSBISVZJTkQxMkxvZ2ljCgovLyBJbmNsdWRlZCBMaWJyYXJpZXMKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgSElWQ29tbW9uIHZlcnNpb24gJzAuMC4xJyBjYWxsZWQgSElDCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnCgppbmNsdWRlIFdIT0NvbW1vbiBjYWxsZWQgV0NvbQoKaW5jbHVkZSBISVZFbGVtZW50cyBjYWxsZWQgSEUKaW5jbHVkZSBISVZJbmRpY2F0b3JFbGVtZW50cyBjYWxsZWQgSElFCgovLyBJbmRpY2F0b3IgRGVmaW5pdGlvbgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+IGRlZmF1bHQgSW50ZXJ2YWxbQDIwMjMtMDEtMDEsIEAyMDIzLTAxLTMwXQoKY29udGV4dCBQYXRpZW50Ci8qIFBvcHVsYXRpb25zICovCgovKgogKkluaXRpYWwgUG9wdWxhdGlvbgogKi8KCmRlZmluZSAiSW5pdGlhbCBQb3B1bGF0aW9uIjoKICB0cnVlCgovKioKICogTnVtZXJhdG9yCiAqIAogKiBEZWZpbml0aW9uOiBUb3RhbCBQWUZVIG9uIE9BTVQgZHVyaW5nIGRlZmluZWQgcmVwb3J0aW5nIHBlcmlvZC4gfCBDYWxjdWxhdGVkIGZyb20gdGhlIHN1bSBvZiB0aGUgdGltZSBvbiBPQU1UIG9mIGVhY2ggT0FNVCByZWNpcGllbnQgZHVyaW5nIHRoZSByZXBvcnRpbmcgcGVyaW9kLgogKiBDYWxjdWxhdGlvbjogU1VNIG9mIFtESUZGRVJFTkNFIGluIE1JTigiRGF0ZSBPQU1UIGluaXRpYXRlZCIsICJSZXBvcnRpbmcgcGVyaW9kIHN0YXJ0IGRhdGUiKSBhbmQgTUFYKCJEYXRlIG9mIGxvc3MgdG8gZm9sbG93LXVwIG9yIE9BTVQgc3RvcHBlZCIsICJSZXBvcnRpbmcgcGVyaW9kIGVuZCBkYXRlIildIGZvciBhbGwgY2xpZW50cyB3aXRoICJNZWRpY2F0aW9ucyBwcmVzY3JpYmVkIiBJTiAnTWV0aGFkb25lJywgJ0J1cHJlbm9ycGhpbmUnCiAqLwoKZGVmaW5lICJNZWFzdXJlIFBvcHVsYXRpb24iOgogIGV4aXN0cyhISUUuImJ1cHJlbm9ycGhpbmVfcHJlc2NyaWJlZCBhdCBkYXRlIikgb3IgZXhpc3RzKEhJRS4ibWV0aGFkb25lX3ByZXNjcmliZWQgYXQgZGF0ZSIpCgoKZGVmaW5lICJNZWFzdXJlIE9ic2VydmF0aW9uIjoKICAoCiAgICBkaWZmZXJlbmNlIGluIGRheXMgYmV0d2VlbgogICAgTWluKAogICAgICB7CiAgICAgICAgVG9EYXRlKEZpcnN0KEhJRS4iT0FNVCBzdGFydCIpKSwgCiAgICAgICAgVG9EYXRlKHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKQogICAgICB9CiAgICApCgogICAgYW5kIFRvRGF0ZShzdGFydCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikKICApCiAgKwogICgKICAgIGRpZmZlcmVuY2UgaW4gZGF5cyBiZXR3ZWVuIGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgYW5kIENvYWxlc2NlKAogICAgICAgIFRvRGF0ZShGaXJzdChISUUuIk9BTVQgZW5kIikpLCAKICAgICAgICBlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgKQogICkKICAKLyoqCiAqIERlbm9taW5hdG9yCiAqCiAqIERlZmluaXRpb246IGEpIFByb2dyYW1tZS9zZXJ2aWNlIHByb3ZpZGVyIGxldmVsOiBlc3RpbWF0ZWQgUFlGVSBmb3IgYWxsIG9waW9pZCBkZXBlbmRlbnQgcGVvcGxlIGFjY2Vzc2luZyBzZXJ2aWNlIGR1cmluZyBkZWZpbmVkIHJlcG9ydGluZyBwZXJpb2QgfCBiKSBQb3B1bGF0aW9uIGxldmVsOiBlc3RpbWF0ZWQgUFlGVSBmb3IgdG90YWwgcG9wdWxhdGlvbiBvZiBvcGlvaWQgZGVwZW5kZW50IHBlb3BsZSBpbiByZWxldmFudCBnZW9ncmFwaGljIGFyZWEgZHVyaW5nIGRlZmluZWQgcmVwb3J0aW5nIHBlcmlvZAogKiBDYWxjdWxhdGlvbjogU2VydmljZSBsZXZlbDogTm90IGNhbGN1bGF0ZWQgaW4gREFLIHwgIHwgUG9wdWxhdGlvbiBkZW5vbWluYXRvcjogIHwgKkVzdGltYXRlZCBQWUZVIGZvciBhbGwgb3Bpb2lkLWRlcGVuZGVudCBwZW9wbGUgYWNjZXNzaW5nIHNlcnZpY2UgZHVyaW5nIGRlZmluZWQgcmVwb3J0aW5nIHBlcmlvZCB8ICB8IE5vdGU6IENhbiBiZSByZXBvcnRlZCBvbmx5IGFzIG51bWVyYXRvcjsgYnkgcG9wdWxhdGlvbiBvciBzZXJ2aWNlIGxldmVsIGlmIHRoZXNlIGRlbm9taW5hdG9yIGVzdGltYXRlcyBhdmFpbGFibGUuCiAqLwoKLyogZW5kIFBvcHVsYXRpb25zICovCgo="/>
</content>
</Library>