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="HIVIND51Logic"/>
<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.51 Logic</td>
</tr>
<tr>
<th scope="row"><b>Id: </b></th>
<td style="padding-left: 4px;">HIVIND51Logic</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-HIVIND51Logic.html">HIV.IND.51 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 people living with HIV newly initiated on ART and tested for TB who are diagnosed with active TB disease</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.51 Logic
* Ref No: DFT.4
* Short Name: TB diagnosis among those tested for TB
*
* Definition: % of people living with HIV newly initiated on ART and tested for TB who are diagnosed with active TB disease
*
* Numerator: Number of people living with HIV newly initiated on ART who were diagnosed as having active TB disease
* Numerator Calculation: COUNT of clients with "HIV status"='HIV-positive' AND with "ART start type"='First-time user of ART' AND with "ART start date" in the reporting period AND "TB screening date" in the reporting period AND "TB screening result"='Screen positive for TB' AND a "TB diagnostic test category" is NOT NULL AND with a "TB diagnostic test date" in the reporting period AND "Date of TB diagnosis" in the reporting period
* Numerator Exclusions:
*
* Denominator: Number of people living with HIV who newly initiated ART and screened positive for TB symptoms who had appropriate diagnostic testing during the reporting period*
* Denominator Calculation: COUNT of clients with "HIV status"='HIV-positive' AND with "ART start type"='First-time user of ART' AND with "ART start date" in the reporting period AND "TB screening date" in the reporting period AND "TB screening result"='Screen positive for TB' AND a "TB diagnostic test category" is NOT NULL AND with a "TB diagnostic test date" in the reporting period
* Denominator Exclusions:
*
* Disaggregations:
* • Gender (female, male, other**)
* • Age (0–4, 5–9, 10–14, 15–19, 20–24, 25–49, 50+ years)***
* • Cities and other administrative regions of epidemiologic importance
*
* Note: This indicator is related to but distinct from indicator TB.4 Percentage of people living with HIV newly initiated on ART who have active TB disease.
*
* Disaggregation Elements: Gender | Age
*
* Numerator and Denominator Elements:
* ART start date
* ART start type
* Date of TB diagnosis
* HIV status
* TB diagnostic test category
* TB diagnostic test date
* TB screening date
* TB screening result
*
* 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.B.DE72: ART start date | The date on which the client started or restarted antiretroviral therapy (ART)
* HIV.B.DE115: HIV status | HIV status reported after applying the national HIV testing algorithm. No single HIV test can provide an HIV-positive diagnosis.
* HIV.B.DE116: HIV-positive | Client is HIV-positive
* HIV.B.DE117: HIV-negative | Client is HIV-negative
* HIV.B.DE118: Unknown | Client has unknown HIV status
* HIV.D.DE39: ART start date | The date on which the client started or restarted ART
* HIV.D.DE43: ART start type | Whether the client is ART naive or is restarting ART
* HIV.D.DE44: First-time user of ART | Client is ART naive, having never taken ART to treat HIV before
* HIV.D.DE45: Restarting ART | Client is restarting ART after stopping treatment for any reason
* HIV.D.DE952: Date of TB diagnosis | The date when the diagnosis was established
* HIV.D.DE986: TB screening result | Record the result of the tuberculosis (TB) screening
* HIV.D.DE987: Screen positive for TB | Screening result was positive for tuberculosis (TB)
* HIV.D.DE988: Screen negative for TB | Screening result was negative for tuberculosis (TB)
* HIV.D.DE989: Inconclusive | Screening result was inconclusive for tuberculosis (TB)
* HIV.D.DE990: TB screening date | Date the TB screening was conducted
* HIV.D.DE992: TB diagnostic test category | The type of diagnostic test performed to detect tuberculosis (TB) disease
* HIV.D.DE993: LF-LAM | Client tested for tuberculosis with a lateral flow urine lipoarabinomannan assay
* HIV.D.DE994: mWRD test for TB | Client tested with a WHO-recommended molecular diagnostic test to detect Mycobacterium tuberculosis (MTB)
* HIV.D.DE995: Microscopy - Sputum acid-fast bacilli (AFB) | Client tested for tuberculosis with a sputum acid-fast bacilli (AFB)
* HIV.D.DE996: TB Culture | Client tested for tuberculosis (TB) with a culture
* HIV.D.DE997: TB diagnostic test date | The date when TB diagnostic test was performed
* HIV.SRV.DE6: ART start date | The date on which the client started or restarted antiretroviral therapy (ART)
*
* Additional Context
* - what it measures: This indicator measures the percentage of people living with HIV newly initiated on ART and, having screened positive for active TB disease, were evaluated and/or had appropriate TB diagnostic testing and were confirmed to have active TB disease.
* - rationale: • Appropriate TB diagnostic testing based on national clinical/WHO guidelines is essential for people living with HIV who screen positive for TB. | • It is important to understand the cascade from ART enrolment to treatment of active TB disease; this indicator will highlight any obstacles between diagnostic testing and TB diagnosis. | • This is the fourth of five "screening cascade" indicators considered priority for high burden TB/HIV settings.
* - method: "Newly initiated" is defined as the number of people living with HIV who start ART in accordance with national treatment guidelines during the reporting period. | For the numerator: Programme records (for example, ART registers, EMRs) | For the denominator: Programme records (for example, ART registers, EMRs)
*
* Suggested Scoring Method: proportion | http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/proportion-measure-cqfm
*/
library HIVIND51Logic
// 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<Date> default Interval[@2023-01-01, @2023-01-30]
context Patient
/* Populations */
/*
*Initial Population
*/
define "Initial Population":
true
/**
* Numerator
*
* Definition: Number of people living with HIV newly initiated on ART who were diagnosed as having active TB disease
* Calculation: COUNT of clients with "HIV status"='HIV-positive' AND with "ART start type"='First-time user of ART' AND with "ART start date" in the reporting period AND "TB screening date" in the reporting period AND "TB screening result"='Screen positive for TB' AND a "TB diagnostic test category" is NOT NULL AND with a "TB diagnostic test date" in the reporting period AND "Date of TB diagnosis" in the reporting period
*/
define "Numerator":
HIE."Has HIV-positive Status"
and (start of First(HE."First-time user of ART").effective.toInterval() during "Measurement Period")
//related the two since we want a positive observation from a specific diagnostic test.
and exists(
HE."TB diagnostic test category" P
with HE."Screen positive for TB" O
such that P.partOf.references(O)
where P.performed.toInterval() during "Measurement Period"
)
and HIE."Date of TB diagnosis"
/**
* Denominator
*
* Definition: Number of people living with HIV who newly initiated ART and screened positive for TB symptoms who had appropriate diagnostic testing during the reporting period*
* Calculation: COUNT of clients with "HIV status"='HIV-positive' AND with "ART start type"='First-time user of ART' AND with "ART start date" in the reporting period AND "TB screening date" in the reporting period AND "TB screening result"='Screen positive for TB' AND a "TB diagnostic test category" is NOT NULL AND with a "TB diagnostic test date" in the reporting period
*/
define "Denominator":
HIE."Has HIV-positive Status"
and (start of First(HE."First-time user of ART").effective.toInterval() during "Measurement Period")
//related the two since we want a positive observation from a specific diagnostic test.
and exists(
HE."TB diagnostic test category" P
with HE."Screen positive for TB" O
such that P.partOf.references(O)
where P.performed.toInterval() during "Measurement Period"
)
/* end Populations */
/*
* Disaggregators
*/
define "Administrative Gender Stratifier":
HIE."By Administrative Gender Stratifier"
define "Age Stratifier":
HIE."By Age Stratifier 2"
define "Geographic Region Stratifier":
HIE."By Geographic Region Stratifier"
define "Stratification":
HIE."By Administrative Gender Stratifier".code
+ ':' + HIE."By Age Stratifier 2"
+ ':' + HIE."By Geographic Region Stratifier"</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/HIVIND51Logic"/>
<version value="0.4.3"/>
<name value="HIVIND51Logic"/>
<title value="HIV.IND.51 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 people living with HIV newly initiated on ART and tested for TB who are diagnosed with active TB disease"/>
<content>
<contentType value="text/cql"/>
<data
value="LyoqCiAqIExpYnJhcnk6IEhJVi5JTkQuNTEgTG9naWMKICogUmVmIE5vOiBERlQuNAogKiBTaG9ydCBOYW1lOiBUQiBkaWFnbm9zaXMgYW1vbmcgdGhvc2UgdGVzdGVkIGZvciBUQgogKgogKiBEZWZpbml0aW9uOiAlIG9mIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgbmV3bHkgaW5pdGlhdGVkIG9uIEFSVCBhbmQgdGVzdGVkIGZvciBUQiB3aG8gYXJlIGRpYWdub3NlZCB3aXRoIGFjdGl2ZSBUQiBkaXNlYXNlCiAqCiAqIE51bWVyYXRvcjogTnVtYmVyIG9mIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgbmV3bHkgaW5pdGlhdGVkIG9uIEFSVCB3aG8gd2VyZSBkaWFnbm9zZWQgYXMgaGF2aW5nIGFjdGl2ZSBUQiBkaXNlYXNlCiAqIE51bWVyYXRvciBDYWxjdWxhdGlvbjogQ09VTlQgb2YgY2xpZW50cyB3aXRoICJISVYgc3RhdHVzIj0nSElWLXBvc2l0aXZlJyBBTkQgd2l0aCAiQVJUIHN0YXJ0IHR5cGUiPSdGaXJzdC10aW1lIHVzZXIgb2YgQVJUJyBBTkQgd2l0aCAiQVJUIHN0YXJ0IGRhdGUiIGluIHRoZSByZXBvcnRpbmcgcGVyaW9kIEFORCAiVEIgc2NyZWVuaW5nIGRhdGUiIGluIHRoZSByZXBvcnRpbmcgcGVyaW9kIEFORCAiVEIgc2NyZWVuaW5nIHJlc3VsdCI9J1NjcmVlbiBwb3NpdGl2ZSBmb3IgVEInIEFORCBhICJUQiBkaWFnbm9zdGljIHRlc3QgY2F0ZWdvcnkiIGlzIE5PVCBOVUxMIEFORCB3aXRoIGEgIlRCIGRpYWdub3N0aWMgdGVzdCBkYXRlIiBpbiB0aGUgcmVwb3J0aW5nIHBlcmlvZCBBTkQgIkRhdGUgb2YgVEIgZGlhZ25vc2lzIiBpbiB0aGUgcmVwb3J0aW5nIHBlcmlvZAogKiBOdW1lcmF0b3IgRXhjbHVzaW9uczogCiAqCiAqIERlbm9taW5hdG9yOiBOdW1iZXIgb2YgcGVvcGxlIGxpdmluZyB3aXRoIEhJViB3aG8gbmV3bHkgaW5pdGlhdGVkIEFSVCBhbmQgc2NyZWVuZWQgcG9zaXRpdmUgZm9yIFRCIHN5bXB0b21zIHdobyBoYWQgYXBwcm9wcmlhdGUgZGlhZ25vc3RpYyB0ZXN0aW5nIGR1cmluZyB0aGUgcmVwb3J0aW5nIHBlcmlvZCoKICogRGVub21pbmF0b3IgQ2FsY3VsYXRpb246IENPVU5UIG9mIGNsaWVudHMgd2l0aCAiSElWIHN0YXR1cyI9J0hJVi1wb3NpdGl2ZScgQU5EIHdpdGggIkFSVCBzdGFydCB0eXBlIj0nRmlyc3QtdGltZSB1c2VyIG9mIEFSVCcgQU5EIHdpdGggIkFSVCBzdGFydCBkYXRlIiBpbiB0aGUgcmVwb3J0aW5nIHBlcmlvZCBBTkQgIlRCIHNjcmVlbmluZyBkYXRlIiBpbiB0aGUgcmVwb3J0aW5nIHBlcmlvZCBBTkQgIlRCIHNjcmVlbmluZyByZXN1bHQiPSdTY3JlZW4gcG9zaXRpdmUgZm9yIFRCJyBBTkQgYSAiVEIgZGlhZ25vc3RpYyB0ZXN0IGNhdGVnb3J5IiBpcyBOT1QgTlVMTCBBTkQgd2l0aCBhICJUQiBkaWFnbm9zdGljIHRlc3QgZGF0ZSIgaW4gdGhlIHJlcG9ydGluZyBwZXJpb2QKICogRGVub21pbmF0b3IgRXhjbHVzaW9uczogCiAqCiAqIERpc2FnZ3JlZ2F0aW9uczoKICog4oCiIEdlbmRlciAoZmVtYWxlLCBtYWxlLCBvdGhlcioqKSAKICogIOKAosKgQWdlICgw4oCTNCwgNeKAkzksIDEw4oCTMTQsIDE14oCTMTksIDIw4oCTMjQsIDI14oCTNDksIDUwKyB5ZWFycykqKiogCiAqICDigKLCoENpdGllcyBhbmQgb3RoZXIgYWRtaW5pc3RyYXRpdmUgcmVnaW9ucyBvZiBlcGlkZW1pb2xvZ2ljIGltcG9ydGFuY2UgCiAqICAgCiAqICBOb3RlOiBUaGlzIGluZGljYXRvciBpcyByZWxhdGVkIHRvIGJ1dCBkaXN0aW5jdCBmcm9tIGluZGljYXRvciBUQi40IFBlcmNlbnRhZ2Ugb2YgcGVvcGxlIGxpdmluZyB3aXRoIEhJViBuZXdseSBpbml0aWF0ZWQgb24gQVJUIHdobyBoYXZlIGFjdGl2ZSBUQiBkaXNlYXNlLgogKgogKiBEaXNhZ2dyZWdhdGlvbiBFbGVtZW50czogR2VuZGVyIHwgQWdlCiAqCiAqIE51bWVyYXRvciBhbmQgRGVub21pbmF0b3IgRWxlbWVudHM6CiAqIEFSVCBzdGFydCBkYXRlIAogKiAgQVJUIHN0YXJ0IHR5cGUgCiAqICBEYXRlIG9mIFRCIGRpYWdub3NpcyAKICogIEhJViBzdGF0dXMgCiAqICBUQiBkaWFnbm9zdGljIHRlc3QgY2F0ZWdvcnkgCiAqICBUQiBkaWFnbm9zdGljIHRlc3QgZGF0ZSAKICogIFRCIHNjcmVlbmluZyBkYXRlIAogKiAgVEIgc2NyZWVuaW5nIHJlc3VsdAogKgogKiBSZWZlcmVuY2U6IENvbnNvbGlkYXRlZCBndWlkZWxpbmVzIG9uIHBlcnNvbi1jZW50cmVkIEhJViBzdHJhdGVnaWMgaW5mb3JtYXRpb246IHN0cmVuZ3RoZW5pbmcgcm91dGluZSBkYXRhIGZvciBpbXBhY3QuIEdlbmV2YTogV29ybGQgSGVhbHRoIE9yZ2FuaXphdGlvbjsgMjAyMgogKiAKICogRGF0YSBDb25jZXB0czoKICogSElWLkEuREUxNzogQWdlIHwgQ2FsY3VsYXRlZCBhZ2UgKG51bWJlciBvZiB5ZWFycykgb2YgdGhlIGNsaWVudCBiYXNlZCBvbiBkYXRlIG9mIGJpcnRoCiAqIEhJVi5BLkRFMTg6IEdlbmRlciogfCBHZW5kZXIgb2YgdGhlIGNsaWVudCoKICogSElWLkEuREUxOTogRmVtYWxlIHwgQ2xpZW50IGlkZW50aWZpZXMgYXMgZmVtYWxlCiAqIEhJVi5BLkRFMjA6IE1hbGUgfCBDbGllbnQgaWRlbnRpZmllcyBhcyBtYWxlCiAqIEhJVi5BLkRFMjE6IFRyYW5zZ2VuZGVyIG1hbGUgfCBDbGllbnQgaWRlbnRpZmllcyBhcyB0cmFuc2dlbmRlciBtYWxlCiAqIEhJVi5BLkRFMjI6IFRyYW5zZ2VuZGVyIGZlbWFsZSB8IENsaWVudCBpZGVudGlmaWVzIGFzIHRyYW5zZ2VuZGVyIGZlbWFsZQogKiBISVYuQS5ERTIzOiBPdGhlciB8IEFkZGl0aW9uYWwgY2F0ZWdvcnkKICogSElWLkIuREU3MjogQVJUIHN0YXJ0IGRhdGUgfCBUaGUgZGF0ZSBvbiB3aGljaCB0aGUgY2xpZW50IHN0YXJ0ZWQgb3IgcmVzdGFydGVkIGFudGlyZXRyb3ZpcmFsIHRoZXJhcHkgKEFSVCkKICogSElWLkIuREUxMTU6IEhJViBzdGF0dXMgfCBISVYgc3RhdHVzIHJlcG9ydGVkIGFmdGVyIGFwcGx5aW5nIHRoZSBuYXRpb25hbCBISVYgdGVzdGluZyBhbGdvcml0aG0uIE5vIHNpbmdsZSBISVYgdGVzdCBjYW4gcHJvdmlkZSBhbiBISVYtcG9zaXRpdmUgZGlhZ25vc2lzLgogKiBISVYuQi5ERTExNjogSElWLXBvc2l0aXZlIHwgQ2xpZW50IGlzIEhJVi1wb3NpdGl2ZQogKiBISVYuQi5ERTExNzogSElWLW5lZ2F0aXZlIHwgQ2xpZW50IGlzIEhJVi1uZWdhdGl2ZQogKiBISVYuQi5ERTExODogVW5rbm93biB8IENsaWVudCBoYXMgdW5rbm93biBISVYgc3RhdHVzCiAqIEhJVi5ELkRFMzk6IEFSVCBzdGFydCBkYXRlIHwgVGhlIGRhdGUgb24gd2hpY2ggdGhlIGNsaWVudCBzdGFydGVkIG9yIHJlc3RhcnRlZCBBUlQKICogSElWLkQuREU0MzogQVJUIHN0YXJ0IHR5cGUgfCBXaGV0aGVyIHRoZSBjbGllbnQgaXMgQVJUIG5haXZlIG9yIGlzIHJlc3RhcnRpbmcgQVJUCiAqIEhJVi5ELkRFNDQ6IEZpcnN0LXRpbWUgdXNlciBvZiBBUlQgfCBDbGllbnQgaXMgQVJUIG5haXZlLCBoYXZpbmcgbmV2ZXIgdGFrZW4gQVJUIHRvIHRyZWF0IEhJViBiZWZvcmUKICogSElWLkQuREU0NTogUmVzdGFydGluZyBBUlQgfCBDbGllbnQgaXMgcmVzdGFydGluZyBBUlQgYWZ0ZXIgc3RvcHBpbmcgdHJlYXRtZW50IGZvciBhbnkgcmVhc29uCiAqIEhJVi5ELkRFOTUyOiBEYXRlIG9mIFRCIGRpYWdub3NpcyB8IFRoZSBkYXRlIHdoZW4gdGhlIGRpYWdub3NpcyB3YXMgZXN0YWJsaXNoZWQKICogSElWLkQuREU5ODY6IFRCIHNjcmVlbmluZyByZXN1bHQgfCBSZWNvcmQgdGhlIHJlc3VsdCBvZiB0aGUgdHViZXJjdWxvc2lzIChUQikgc2NyZWVuaW5nCiAqIEhJVi5ELkRFOTg3OiBTY3JlZW4gcG9zaXRpdmUgZm9yIFRCIHwgU2NyZWVuaW5nIHJlc3VsdCB3YXMgcG9zaXRpdmUgZm9yIHR1YmVyY3Vsb3NpcyAoVEIpCiAqIEhJVi5ELkRFOTg4OiBTY3JlZW4gbmVnYXRpdmUgZm9yIFRCIHwgU2NyZWVuaW5nIHJlc3VsdCB3YXMgbmVnYXRpdmUgZm9yIHR1YmVyY3Vsb3NpcyAoVEIpCiAqIEhJVi5ELkRFOTg5OiBJbmNvbmNsdXNpdmUgfCBTY3JlZW5pbmcgcmVzdWx0IHdhcyBpbmNvbmNsdXNpdmUgZm9yIHR1YmVyY3Vsb3NpcyAoVEIpCiAqIEhJVi5ELkRFOTkwOiBUQiBzY3JlZW5pbmcgZGF0ZSB8IERhdGUgdGhlIFRCIHNjcmVlbmluZyB3YXMgY29uZHVjdGVkCiAqIEhJVi5ELkRFOTkyOiBUQiBkaWFnbm9zdGljIHRlc3QgY2F0ZWdvcnkgfCBUaGUgdHlwZSBvZiBkaWFnbm9zdGljIHRlc3QgcGVyZm9ybWVkIHRvIGRldGVjdCB0dWJlcmN1bG9zaXMgKFRCKSBkaXNlYXNlCiAqIEhJVi5ELkRFOTkzOiBMRi1MQU0gfCBDbGllbnQgdGVzdGVkIGZvciB0dWJlcmN1bG9zaXMgd2l0aCBhIGxhdGVyYWwgZmxvdyB1cmluZSBsaXBvYXJhYmlub21hbm5hbiBhc3NheQogKiBISVYuRC5ERTk5NDogbVdSRCB0ZXN0IGZvciBUQiB8IENsaWVudCB0ZXN0ZWQgd2l0aCBhIFdITy1yZWNvbW1lbmRlZCBtb2xlY3VsYXIgZGlhZ25vc3RpYyB0ZXN0IHRvIGRldGVjdCBNeWNvYmFjdGVyaXVtIHR1YmVyY3Vsb3NpcyAoTVRCKQogKiBISVYuRC5ERTk5NTogTWljcm9zY29weSAtIFNwdXR1bSBhY2lkLWZhc3QgYmFjaWxsaSAoQUZCKSB8IENsaWVudCB0ZXN0ZWQgZm9yIHR1YmVyY3Vsb3NpcyB3aXRoIGEgc3B1dHVtIGFjaWQtZmFzdCBiYWNpbGxpIChBRkIpCiAqIEhJVi5ELkRFOTk2OiBUQiBDdWx0dXJlIHwgQ2xpZW50IHRlc3RlZCBmb3IgdHViZXJjdWxvc2lzIChUQikgd2l0aCBhIGN1bHR1cmUKICogSElWLkQuREU5OTc6IFRCIGRpYWdub3N0aWMgdGVzdCBkYXRlIHwgVGhlIGRhdGUgd2hlbiBUQiBkaWFnbm9zdGljIHRlc3Qgd2FzIHBlcmZvcm1lZAogKiBISVYuU1JWLkRFNjogQVJUIHN0YXJ0IGRhdGUgfCBUaGUgZGF0ZSBvbiB3aGljaCB0aGUgY2xpZW50IHN0YXJ0ZWQgb3IgcmVzdGFydGVkIGFudGlyZXRyb3ZpcmFsIHRoZXJhcHkgKEFSVCkKICoKICogQWRkaXRpb25hbCBDb250ZXh0CiAqIC0gd2hhdCBpdCBtZWFzdXJlczogVGhpcyBpbmRpY2F0b3IgbWVhc3VyZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgcGVvcGxlIGxpdmluZyB3aXRoIEhJViBuZXdseSBpbml0aWF0ZWQgb24gQVJUIGFuZCwgaGF2aW5nIHNjcmVlbmVkIHBvc2l0aXZlIGZvciBhY3RpdmUgVEIgZGlzZWFzZSwgd2VyZSBldmFsdWF0ZWQgYW5kL29yIGhhZCBhcHByb3ByaWF0ZSBUQiBkaWFnbm9zdGljIHRlc3RpbmcgYW5kIHdlcmUgY29uZmlybWVkIHRvIGhhdmUgYWN0aXZlIFRCIGRpc2Vhc2UuCiAqIC0gcmF0aW9uYWxlOiDigKIgQXBwcm9wcmlhdGUgVEIgZGlhZ25vc3RpYyB0ZXN0aW5nIGJhc2VkIG9uIG5hdGlvbmFsIGNsaW5pY2FsL1dITyBndWlkZWxpbmVzIGlzIGVzc2VudGlhbCBmb3IgcGVvcGxlIGxpdmluZyB3aXRoIEhJViB3aG8gc2NyZWVuIHBvc2l0aXZlIGZvciBUQi4gfCDigKIgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhc2NhZGUgZnJvbSBBUlQgZW5yb2xtZW50IHRvIHRyZWF0bWVudCBvZiBhY3RpdmUgVEIgZGlzZWFzZTsgdGhpcyBpbmRpY2F0b3Igd2lsbCBoaWdobGlnaHQgYW55IG9ic3RhY2xlcyBiZXR3ZWVuIGRpYWdub3N0aWMgdGVzdGluZyBhbmQgVEIgZGlhZ25vc2lzLiB8IOKAosKgVGhpcyBpcyB0aGUgZm91cnRoIG9mIGZpdmUgInNjcmVlbmluZyBjYXNjYWRlIiBpbmRpY2F0b3JzIGNvbnNpZGVyZWQgcHJpb3JpdHkgZm9yIGhpZ2ggYnVyZGVuIFRCL0hJViBzZXR0aW5ncy4KICogLSBtZXRob2Q6ICJOZXdseSBpbml0aWF0ZWQiIGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBwZW9wbGUgbGl2aW5nIHdpdGggSElWIHdobyBzdGFydCBBUlQgaW4gYWNjb3JkYW5jZSB3aXRoIG5hdGlvbmFsIHRyZWF0bWVudCBndWlkZWxpbmVzIGR1cmluZyB0aGUgcmVwb3J0aW5nIHBlcmlvZC4gfCBGb3IgdGhlIG51bWVyYXRvcjogUHJvZ3JhbW1lIHJlY29yZHMgKGZvciBleGFtcGxlLCBBUlQgcmVnaXN0ZXJzLCBFTVJzKSAgfCBGb3IgdGhlIGRlbm9taW5hdG9yOiBQcm9ncmFtbWUgcmVjb3JkcyAoZm9yIGV4YW1wbGUsIEFSVCByZWdpc3RlcnMsIEVNUnMpCiAqIAogKiBTdWdnZXN0ZWQgU2NvcmluZyBNZXRob2Q6IHByb3BvcnRpb24gfCBodHRwOi8vaGw3Lm9yZy9maGlyL3VzL2NxZm1lYXN1cmVzL1N0cnVjdHVyZURlZmluaXRpb24vcHJvcG9ydGlvbi1tZWFzdXJlLWNxZm0KICovCgpsaWJyYXJ5IEhJVklORDUxTG9naWMKCi8vIEluY2x1ZGVkIExpYnJhcmllcwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBISVZDb21tb24gdmVyc2lvbiAnMC4wLjEnIGNhbGxlZCBISUMKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgV0hPQ29tbW9uIGNhbGxlZCBXQ29tCmluY2x1ZGUgSElWRWxlbWVudHMgY2FsbGVkIEhFCmluY2x1ZGUgSElWSW5kaWNhdG9yRWxlbWVudHMgY2FsbGVkIEhJRQoKLy8gSW5kaWNhdG9yIERlZmluaXRpb24KcGFyYW1ldGVyICJNZWFzdXJlbWVudCBQZXJpb2QiIEludGVydmFsPERhdGU+IGRlZmF1bHQgSW50ZXJ2YWxbQDIwMjMtMDEtMDEsIEAyMDIzLTAxLTMwXQoKY29udGV4dCBQYXRpZW50Ci8qIFBvcHVsYXRpb25zICovCgovKgogKkluaXRpYWwgUG9wdWxhdGlvbgogKi8KCmRlZmluZSAiSW5pdGlhbCBQb3B1bGF0aW9uIjoKICB0cnVlCgovKioKICogTnVtZXJhdG9yCiAqIAogKiBEZWZpbml0aW9uOiBOdW1iZXIgb2YgcGVvcGxlIGxpdmluZyB3aXRoIEhJViBuZXdseSBpbml0aWF0ZWQgb24gQVJUIHdobyB3ZXJlIGRpYWdub3NlZCBhcyBoYXZpbmcgYWN0aXZlIFRCIGRpc2Vhc2UKICogQ2FsY3VsYXRpb246IENPVU5UIG9mIGNsaWVudHMgd2l0aCAiSElWIHN0YXR1cyI9J0hJVi1wb3NpdGl2ZScgQU5EIHdpdGggIkFSVCBzdGFydCB0eXBlIj0nRmlyc3QtdGltZSB1c2VyIG9mIEFSVCcgQU5EIHdpdGggIkFSVCBzdGFydCBkYXRlIiBpbiB0aGUgcmVwb3J0aW5nIHBlcmlvZCBBTkQgIlRCIHNjcmVlbmluZyBkYXRlIiBpbiB0aGUgcmVwb3J0aW5nIHBlcmlvZCBBTkQgIlRCIHNjcmVlbmluZyByZXN1bHQiPSdTY3JlZW4gcG9zaXRpdmUgZm9yIFRCJyBBTkQgYSAiVEIgZGlhZ25vc3RpYyB0ZXN0IGNhdGVnb3J5IiBpcyBOT1QgTlVMTCBBTkQgd2l0aCBhICJUQiBkaWFnbm9zdGljIHRlc3QgZGF0ZSIgaW4gdGhlIHJlcG9ydGluZyBwZXJpb2QgQU5EICJEYXRlIG9mIFRCIGRpYWdub3NpcyIgaW4gdGhlIHJlcG9ydGluZyBwZXJpb2QKICovCgpkZWZpbmUgIk51bWVyYXRvciI6CiAgSElFLiJIYXMgSElWLXBvc2l0aXZlIFN0YXR1cyIKICBhbmQgKHN0YXJ0IG9mIEZpcnN0KEhFLiJGaXJzdC10aW1lIHVzZXIgb2YgQVJUIikuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSBkdXJpbmcgIk1lYXN1cmVtZW50IFBlcmlvZCIpCiAgLy9yZWxhdGVkIHRoZSB0d28gc2luY2Ugd2Ugd2FudCBhIHBvc2l0aXZlIG9ic2VydmF0aW9uIGZyb20gYSBzcGVjaWZpYyBkaWFnbm9zdGljIHRlc3QuCiAgYW5kIGV4aXN0cygKICAgIEhFLiJUQiBkaWFnbm9zdGljIHRlc3QgY2F0ZWdvcnkiIFAKICAgIHdpdGggSEUuIlNjcmVlbiBwb3NpdGl2ZSBmb3IgVEIiIE8KICAgICAgc3VjaCB0aGF0IFAucGFydE9mLnJlZmVyZW5jZXMoTykKICAgIHdoZXJlIFAucGVyZm9ybWVkLnRvSW50ZXJ2YWwoKSBkdXJpbmcgIk1lYXN1cmVtZW50IFBlcmlvZCIKICApCiAgYW5kIEhJRS4iRGF0ZSBvZiBUQiBkaWFnbm9zaXMiCgoKLyoqCiAqIERlbm9taW5hdG9yCiAqCiAqIERlZmluaXRpb246IE51bWJlciBvZiBwZW9wbGUgbGl2aW5nIHdpdGggSElWIHdobyBuZXdseSBpbml0aWF0ZWQgQVJUIGFuZCBzY3JlZW5lZCBwb3NpdGl2ZSBmb3IgVEIgc3ltcHRvbXMgd2hvIGhhZCBhcHByb3ByaWF0ZSBkaWFnbm9zdGljIHRlc3RpbmcgZHVyaW5nIHRoZSByZXBvcnRpbmcgcGVyaW9kKgogKiBDYWxjdWxhdGlvbjogQ09VTlQgb2YgY2xpZW50cyB3aXRoICJISVYgc3RhdHVzIj0nSElWLXBvc2l0aXZlJyBBTkQgd2l0aCAiQVJUIHN0YXJ0IHR5cGUiPSdGaXJzdC10aW1lIHVzZXIgb2YgQVJUJyBBTkQgd2l0aCAiQVJUIHN0YXJ0IGRhdGUiIGluIHRoZSByZXBvcnRpbmcgcGVyaW9kIEFORCAiVEIgc2NyZWVuaW5nIGRhdGUiIGluIHRoZSByZXBvcnRpbmcgcGVyaW9kIEFORCAiVEIgc2NyZWVuaW5nIHJlc3VsdCI9J1NjcmVlbiBwb3NpdGl2ZSBmb3IgVEInIEFORCBhICJUQiBkaWFnbm9zdGljIHRlc3QgY2F0ZWdvcnkiIGlzIE5PVCBOVUxMIEFORCB3aXRoIGEgIlRCIGRpYWdub3N0aWMgdGVzdCBkYXRlIiBpbiB0aGUgcmVwb3J0aW5nIHBlcmlvZAogKi8KCmRlZmluZSAiRGVub21pbmF0b3IiOgogIEhJRS4iSGFzIEhJVi1wb3NpdGl2ZSBTdGF0dXMiCiAgYW5kIChzdGFydCBvZiBGaXJzdChIRS4iRmlyc3QtdGltZSB1c2VyIG9mIEFSVCIpLmVmZmVjdGl2ZS50b0ludGVydmFsKCkgZHVyaW5nICJNZWFzdXJlbWVudCBQZXJpb2QiKQogIC8vcmVsYXRlZCB0aGUgdHdvIHNpbmNlIHdlIHdhbnQgYSBwb3NpdGl2ZSBvYnNlcnZhdGlvbiBmcm9tIGEgc3BlY2lmaWMgZGlhZ25vc3RpYyB0ZXN0LgogIGFuZCBleGlzdHMoCiAgICBIRS4iVEIgZGlhZ25vc3RpYyB0ZXN0IGNhdGVnb3J5IiBQCiAgICB3aXRoIEhFLiJTY3JlZW4gcG9zaXRpdmUgZm9yIFRCIiBPCiAgICAgIHN1Y2ggdGhhdCBQLnBhcnRPZi5yZWZlcmVuY2VzKE8pCiAgICB3aGVyZSBQLnBlcmZvcm1lZC50b0ludGVydmFsKCkgZHVyaW5nICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgKQogICAgCgovKiBlbmQgUG9wdWxhdGlvbnMgKi8KCi8qCiAqIERpc2FnZ3JlZ2F0b3JzCiAqLwoKZGVmaW5lICJBZG1pbmlzdHJhdGl2ZSBHZW5kZXIgU3RyYXRpZmllciI6CglISUUuIkJ5IEFkbWluaXN0cmF0aXZlIEdlbmRlciBTdHJhdGlmaWVyIgoKZGVmaW5lICJBZ2UgU3RyYXRpZmllciI6CglISUUuIkJ5IEFnZSBTdHJhdGlmaWVyIDIiCgpkZWZpbmUgIkdlb2dyYXBoaWMgUmVnaW9uIFN0cmF0aWZpZXIiOgoJSElFLiJCeSBHZW9ncmFwaGljIFJlZ2lvbiBTdHJhdGlmaWVyIgoKZGVmaW5lICJTdHJhdGlmaWNhdGlvbiI6CiBISUUuIkJ5IEFkbWluaXN0cmF0aXZlIEdlbmRlciBTdHJhdGlmaWVyIi5jb2RlIAogICsgJzonICsgSElFLiJCeSBBZ2UgU3RyYXRpZmllciAyIgorICc6JyArIEhJRS4iQnkgR2VvZ3JhcGhpYyBSZWdpb24gU3RyYXRpZmllciI="/>
</content>
</Library>