Common CQL Artifacts for FHIR (US-Based)
1.0.0-ballot - STU 1 Ballot
Common CQL Artifacts for FHIR (US-Based), published by HL7 International / Clinical Decision Support. This guide is not an authorized publication; it is the continuous build for version 1.0.0-ballot built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/us-cql-ig/ and changes regularly. See the Directory of published versions
Page standards status: Informative | Maturity Level: 3 |
<Library xmlns="http://hl7.org/fhir">
<id value="MBODAInitialExpressions"/>
<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;">Expression Library for the Medical Benefit Outpatient Drug Authorization Example</td>
</tr>
<tr>
<th scope="row"><b>Id: </b></th>
<td style="padding-left: 4px;">MBODAInitialExpressions</td>
</tr>
<tr>
<th scope="row"><b>Version: </b></th>
<td style="padding-left: 4px;">1.0.0-ballot</td>
</tr>
<tr>
<th scope="row"><b>Url: </b></th>
<td style="padding-left: 4px;"><a href="Library-MBODAInitialExpressions.html">Expression Library for the Medical Benefit Outpatient Drug Authorization Example</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.5.0/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-09-10 20:00:05+0000</td>
</tr>
<tr>
<th scope="row"><b>Publisher: </b></th>
<td style="padding-left: 4px;">HL7 International / Clinical Decision Support</td>
</tr>
<tr>
<th scope="row"><b>Description: </b></th>
<td style="padding-left: 4px;"><div><p>Initial expressions for use in populating answers to questions in the Medical Benefit Outpatient Drug Authorization example questionnaire.</p>
</div></td>
</tr>
<tr>
<th scope="row"><b>Jurisdiction: </b></th>
<td style="padding-left: 4px;">US</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 MBODAInitialExpressions
using USCore version '7.0.0'
using FHIR version '4.0.1'
include hl7.fhir.uv.cql.FHIRHelpers version '4.0.1'
include USCoreCommon called UC
include USCoreElements called UCE
//CumulativeMedicationDuration was created as part of the US ECQM and CDC Opioid Guideline development
//http://fhir.org/guides/cdc/opioid-mme-r4
include CumulativeMedicationDuration called CMD
codesystem "LOINC": 'http://loinc.org'
codesystem "Identifier Type": 'http://terminology.hl7.org/CodeSystem/v2-0203'
code "Body surface area": '8277-6' from "LOINC" display 'Intensive care unit'
code "Member Number": 'MB' from "Identifier Type"
parameter "MedicationRequest" USCore.MedicationRequestProfile
context Patient
define "Last Name":
UCE."Last Name"
define "First Name":
UCE."First Name"
define "Allergies":
UCE."Active Confirmed Allergies and Intolerances".code.codes.display
define "Height":
convert (((UCE."All Body Height Measurements").mostRecent() as "observation-bodyheight").value) to '[in_i]'
define "Height in [in_i]":
"Height".value
define "Height in cm":
convert("Height") to 'cm'
define "Weight Most Recent":
(UCE."All Body Weight Measurements").mostRecent() as "observation-bodyweight"
define "Weight":
convert (((UCE."All Body Weight Measurements").mostRecent() as "observation-bodyweight").value) to '[lb_av]'
define "Weight in [lb_av]":
"Weight".value
define "Weight in kg":
convert("Weight") to 'kg'
define "BMI":
(UCE."All Body Mass Index Measurements").value
define "Most Recent BSA":
UCE."Most Recent BSA"
define "BSA":
Coalesce("Most Recent BSA", "Calculated BSA - Mosteller")
define "BSA in m2":
"BSA".value
// Mosteller formula using lbs and inches
define "Calculated BSA - Mosteller":
UCE.CalculateBSA('Mosteller', "Height", "Weight")
//((("Weight"*"Height")/3131).value)^0.5
define "Calculated BSA - DuBois and DuBois":
UCE.CalculateBSA('DuBois and DuBois', "Height", "Weight")
define "Diagnosis Codes":
UCE."All Conditions" C
return C.code
define "Diagnosis Descriptions":
"Diagnosis Codes" ConceptItem
return Combine(((ConceptItem.codes) C return C.display), '|')
define "Medication Requested":
UCE."All Medications" M
where EndsWith(("Most Recent Medication Request".medication as USCore.Reference).reference, M.id)
define "Medication Name":
"Medication Requested" M
return M.code.display
define "Code of Requested Drug":
"Medication Requested" M
return M.code
define "Retrieve Medication Request test parameter":
// The VSCode extension doesn't support parameters
// When executing CQL with the VSCode extension retrieve the resource specific for the test case
// the list of resource ids match the resources from the test case folders
singleton from ([USCore.MedicationRequestProfile] MR where MR.id in {
'example',
'example-continued-therapy',
'example-new-therapy',
'uscore-patient-1-med-request-example',
'uscore-patient-2-med-request-example',
'uscore-patient-3-med-request-example',
'uscore-patient-4-med-request-example'})
define "Most Recent Medication Request":
Coalesce(
MedicationRequest,
"Retrieve Medication Request test parameter"
)
define "Medication Request References":
("Most Recent Medication Request".medication as USCore.Reference).reference
define "Most Recent Medication Request dosageInstruction":
// TODO: should this really be a singleton?
singleton from "Most Recent Medication Request".dosageInstruction
define "Most Recent Medication Request dosageInstruction.doseAndRate":
// TODO: should this really be a singleton?
singleton from "Most Recent Medication Request dosageInstruction".doseAndRate
define "Medication Dose":
"Most Recent Medication Request dosageInstruction.doseAndRate".dose
define "Medication Route":
"Most Recent Medication Request dosageInstruction".route
define "Medication Frequency value":
"Most Recent Medication Request dosageInstruction".timing.repeat.frequency
define "Medication Frequency Period":
if (IsNull("Most Recent Medication Request dosageInstruction".timing.repeat.period)) then
null
else
System.Quantity {
value: "Most Recent Medication Request dosageInstruction".timing.repeat.period,
unit: "Most Recent Medication Request dosageInstruction".timing.repeat.periodUnit
}
define "Medication Frequency": // '1x per 1d', '3x per 2wk', '1x per 1mo'
ToString("Medication Frequency value") + 'x' +
' per ' + ToString("Medication Frequency Period".value) +
' ' + "Medication Frequency Period".unit
define "Quantity or Number of requested Visits":
"Most Recent Medication Request".dispenseRequest.quantity
define "Prior Prescription":
"Most Recent Medication Request".priorPrescription
define "New therapy":
IsNull("Prior Prescription")
define "New therapy code":
if ("New therapy") then
System.Code { code: 'NewMedication', display: 'New Medication' }
else
System.Code { code: 'ContinuedTherapy', display: 'Continuation of therapy' }
// MISSING: needs test data to validate
//Initial date of therapy does not return correct result if there have been more than 1 prior Prescriptions - logic needs to be adapted to that case
define "Initial date of therapy":
if not "New therapy" then
UCE."All Medication Requests" M
where EndsWith(("Most Recent Medication Request".priorPrescription as USCore.Reference).reference, M.id)
return M.authoredOn
else
null
define "Medication Request Period":
CMD."MedicationRequestPeriod"("Most Recent Medication Request")
define "Expected Therapy Length":
convert(
CMD.Quantity(days between start of "Medication Request Period" and end of "Medication Request Period", 'd')
) to 'd'
define "Anticipated/actual date of service":
start of "Medication Request Period"
/*
//related Procedures - Procedure is not linked to medication request - not possible to find the related procedures
*/</code></pre></td></tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table>
<tr><th><b>Content: </b> application/elm+xml</th></tr>
<tr><td><pre><code/></pre></td></tr>
</table>
</td>
</tr>
</table>
</div>
</div>
</text>
<extension
url="http://hl7.org/fhir/StructureDefinition/structuredefinition-fmm">
<valueInteger value="3"/>
</extension>
<extension
url="http://hl7.org/fhir/StructureDefinition/structuredefinition-wg">
<valueCode value="cds"/>
</extension>
<extension
url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
<valueCode value="informative"/>
</extension>
<url value="http://hl7.org/fhir/us/cql/Library/MBODAInitialExpressions"/>
<version value="1.0.0-ballot"/>
<name value="MBODAInitialExpressions"/>
<title
value="Expression Library for the Medical Benefit Outpatient Drug Authorization Example"/>
<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-09-10T20:00:05+00:00"/>
<publisher value="HL7 International / Clinical Decision Support"/>
<contact>
<telecom>
<system value="url"/>
<value value="http://www.hl7.org/Special/committees/dss"/>
</telecom>
</contact>
<description
value="Initial expressions for use in populating answers to questions in the Medical Benefit Outpatient Drug Authorization example questionnaire."/>
<jurisdiction>
<coding>
<system value="urn:iso:std:iso:3166"/>
<code value="US"/>
<display value="United States of America"/>
</coding>
</jurisdiction>
<content>
<contentType value="text/cql"/>
<data
value="bGlicmFyeSBNQk9EQUluaXRpYWxFeHByZXNzaW9ucwoKdXNpbmcgVVNDb3JlIHZlcnNpb24gJzcuMC4wJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnCmluY2x1ZGUgVVNDb3JlQ29tbW9uIGNhbGxlZCBVQwppbmNsdWRlIFVTQ29yZUVsZW1lbnRzIGNhbGxlZCBVQ0UKCi8vQ3VtdWxhdGl2ZU1lZGljYXRpb25EdXJhdGlvbiB3YXMgY3JlYXRlZCBhcyBwYXJ0IG9mIHRoZSBVUyBFQ1FNIGFuZCBDREMgT3Bpb2lkIEd1aWRlbGluZSBkZXZlbG9wbWVudCAKLy9odHRwOi8vZmhpci5vcmcvZ3VpZGVzL2NkYy9vcGlvaWQtbW1lLXI0CmluY2x1ZGUgQ3VtdWxhdGl2ZU1lZGljYXRpb25EdXJhdGlvbiBjYWxsZWQgQ01ECgpjb2Rlc3lzdGVtICJMT0lOQyI6ICdodHRwOi8vbG9pbmMub3JnJwpjb2Rlc3lzdGVtICJJZGVudGlmaWVyIFR5cGUiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS92Mi0wMjAzJwpjb2RlICJCb2R5IHN1cmZhY2UgYXJlYSI6ICc4Mjc3LTYnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdJbnRlbnNpdmUgY2FyZSB1bml0Jwpjb2RlICJNZW1iZXIgTnVtYmVyIjogJ01CJyBmcm9tICJJZGVudGlmaWVyIFR5cGUiCgpwYXJhbWV0ZXIgIk1lZGljYXRpb25SZXF1ZXN0IiBVU0NvcmUuTWVkaWNhdGlvblJlcXVlc3RQcm9maWxlCgpjb250ZXh0IFBhdGllbnQKCmRlZmluZSAiTGFzdCBOYW1lIjoKICBVQ0UuIkxhc3QgTmFtZSIKCmRlZmluZSAiRmlyc3QgTmFtZSI6CiAgVUNFLiJGaXJzdCBOYW1lIgoKZGVmaW5lICJBbGxlcmdpZXMiOgogIFVDRS4iQWN0aXZlIENvbmZpcm1lZCBBbGxlcmdpZXMgYW5kIEludG9sZXJhbmNlcyIuY29kZS5jb2Rlcy5kaXNwbGF5IAoKZGVmaW5lICJIZWlnaHQiOgogIGNvbnZlcnQgKCgoVUNFLiJBbGwgQm9keSBIZWlnaHQgTWVhc3VyZW1lbnRzIikubW9zdFJlY2VudCgpIGFzICJvYnNlcnZhdGlvbi1ib2R5aGVpZ2h0IikudmFsdWUpIHRvICdbaW5faV0nCgpkZWZpbmUgIkhlaWdodCBpbiBbaW5faV0iOgogICJIZWlnaHQiLnZhbHVlCgpkZWZpbmUgIkhlaWdodCBpbiBjbSI6CiAgY29udmVydCgiSGVpZ2h0IikgdG8gJ2NtJwoKZGVmaW5lICJXZWlnaHQgTW9zdCBSZWNlbnQiOgogIChVQ0UuIkFsbCBCb2R5IFdlaWdodCBNZWFzdXJlbWVudHMiKS5tb3N0UmVjZW50KCkgYXMgIm9ic2VydmF0aW9uLWJvZHl3ZWlnaHQiCgpkZWZpbmUgIldlaWdodCI6CiAgY29udmVydCAoKChVQ0UuIkFsbCBCb2R5IFdlaWdodCBNZWFzdXJlbWVudHMiKS5tb3N0UmVjZW50KCkgYXMgIm9ic2VydmF0aW9uLWJvZHl3ZWlnaHQiKS52YWx1ZSkgdG8gJ1tsYl9hdl0nCgpkZWZpbmUgIldlaWdodCBpbiBbbGJfYXZdIjoKICAiV2VpZ2h0Ii52YWx1ZQoKZGVmaW5lICJXZWlnaHQgaW4ga2ciOgogIGNvbnZlcnQoIldlaWdodCIpIHRvICdrZycKCmRlZmluZSAiQk1JIjoKICAoVUNFLiJBbGwgQm9keSBNYXNzIEluZGV4IE1lYXN1cmVtZW50cyIpLnZhbHVlCgpkZWZpbmUgIk1vc3QgUmVjZW50IEJTQSI6CiAgVUNFLiJNb3N0IFJlY2VudCBCU0EiCgpkZWZpbmUgIkJTQSI6CiAgQ29hbGVzY2UoIk1vc3QgUmVjZW50IEJTQSIsICJDYWxjdWxhdGVkIEJTQSAtIE1vc3RlbGxlciIpCgpkZWZpbmUgIkJTQSBpbiBtMiI6CiAgIkJTQSIudmFsdWUKCi8vIE1vc3RlbGxlciBmb3JtdWxhIHVzaW5nIGxicyBhbmQgaW5jaGVzCmRlZmluZSAiQ2FsY3VsYXRlZCBCU0EgLSBNb3N0ZWxsZXIiOgogIFVDRS5DYWxjdWxhdGVCU0EoJ01vc3RlbGxlcicsICJIZWlnaHQiLCAiV2VpZ2h0IikKICAvLygoKCJXZWlnaHQiKiJIZWlnaHQiKS8zMTMxKS52YWx1ZSleMC41CgpkZWZpbmUgIkNhbGN1bGF0ZWQgQlNBIC0gRHVCb2lzIGFuZCBEdUJvaXMiOgogIFVDRS5DYWxjdWxhdGVCU0EoJ0R1Qm9pcyBhbmQgRHVCb2lzJywgIkhlaWdodCIsICJXZWlnaHQiKQoKZGVmaW5lICJEaWFnbm9zaXMgQ29kZXMiOgogIFVDRS4iQWxsIENvbmRpdGlvbnMiIEMKICAgIHJldHVybiBDLmNvZGUKCmRlZmluZSAiRGlhZ25vc2lzIERlc2NyaXB0aW9ucyI6CiAgIkRpYWdub3NpcyBDb2RlcyIgQ29uY2VwdEl0ZW0KICAgIHJldHVybiBDb21iaW5lKCgoQ29uY2VwdEl0ZW0uY29kZXMpIEMgcmV0dXJuIEMuZGlzcGxheSksICd8JykKCmRlZmluZSAiTWVkaWNhdGlvbiBSZXF1ZXN0ZWQiOgogIFVDRS4iQWxsIE1lZGljYXRpb25zIiBNCiAgICB3aGVyZSBFbmRzV2l0aCgoIk1vc3QgUmVjZW50IE1lZGljYXRpb24gUmVxdWVzdCIubWVkaWNhdGlvbiBhcyBVU0NvcmUuUmVmZXJlbmNlKS5yZWZlcmVuY2UsIE0uaWQpCgpkZWZpbmUgIk1lZGljYXRpb24gTmFtZSI6CiAgIk1lZGljYXRpb24gUmVxdWVzdGVkIiBNCiAgICByZXR1cm4gTS5jb2RlLmRpc3BsYXkKCmRlZmluZSAiQ29kZSBvZiBSZXF1ZXN0ZWQgRHJ1ZyI6CiAgIk1lZGljYXRpb24gUmVxdWVzdGVkIiBNCiAgICByZXR1cm4gTS5jb2RlCgpkZWZpbmUgIlJldHJpZXZlIE1lZGljYXRpb24gUmVxdWVzdCB0ZXN0IHBhcmFtZXRlciI6CiAgLy8gVGhlIFZTQ29kZSBleHRlbnNpb24gZG9lc24ndCBzdXBwb3J0IHBhcmFtZXRlcnMKICAvLyBXaGVuIGV4ZWN1dGluZyBDUUwgd2l0aCB0aGUgVlNDb2RlIGV4dGVuc2lvbiByZXRyaWV2ZSB0aGUgcmVzb3VyY2Ugc3BlY2lmaWMgZm9yIHRoZSB0ZXN0IGNhc2UKICAvLyAgIHRoZSBsaXN0IG9mIHJlc291cmNlIGlkcyBtYXRjaCB0aGUgcmVzb3VyY2VzIGZyb20gdGhlIHRlc3QgY2FzZSBmb2xkZXJzCiAgc2luZ2xldG9uIGZyb20gKFtVU0NvcmUuTWVkaWNhdGlvblJlcXVlc3RQcm9maWxlXSBNUiB3aGVyZSBNUi5pZCBpbiB7IAogICAgJ2V4YW1wbGUnLAogICAgJ2V4YW1wbGUtY29udGludWVkLXRoZXJhcHknLAogICAgJ2V4YW1wbGUtbmV3LXRoZXJhcHknLAogICAgJ3VzY29yZS1wYXRpZW50LTEtbWVkLXJlcXVlc3QtZXhhbXBsZScsCiAgICAndXNjb3JlLXBhdGllbnQtMi1tZWQtcmVxdWVzdC1leGFtcGxlJywKICAgICd1c2NvcmUtcGF0aWVudC0zLW1lZC1yZXF1ZXN0LWV4YW1wbGUnLAogICAgJ3VzY29yZS1wYXRpZW50LTQtbWVkLXJlcXVlc3QtZXhhbXBsZSd9KQoKZGVmaW5lICJNb3N0IFJlY2VudCBNZWRpY2F0aW9uIFJlcXVlc3QiOgogIENvYWxlc2NlKAogICAgTWVkaWNhdGlvblJlcXVlc3QsCiAgICAiUmV0cmlldmUgTWVkaWNhdGlvbiBSZXF1ZXN0IHRlc3QgcGFyYW1ldGVyIgogICkKCmRlZmluZSAiTWVkaWNhdGlvbiBSZXF1ZXN0IFJlZmVyZW5jZXMiOgogICgiTW9zdCBSZWNlbnQgTWVkaWNhdGlvbiBSZXF1ZXN0Ii5tZWRpY2F0aW9uIGFzIFVTQ29yZS5SZWZlcmVuY2UpLnJlZmVyZW5jZQoKZGVmaW5lICJNb3N0IFJlY2VudCBNZWRpY2F0aW9uIFJlcXVlc3QgZG9zYWdlSW5zdHJ1Y3Rpb24iOgogIC8vIFRPRE86IHNob3VsZCB0aGlzIHJlYWxseSBiZSBhIHNpbmdsZXRvbj8KICBzaW5nbGV0b24gZnJvbSAiTW9zdCBSZWNlbnQgTWVkaWNhdGlvbiBSZXF1ZXN0Ii5kb3NhZ2VJbnN0cnVjdGlvbgoKZGVmaW5lICJNb3N0IFJlY2VudCBNZWRpY2F0aW9uIFJlcXVlc3QgZG9zYWdlSW5zdHJ1Y3Rpb24uZG9zZUFuZFJhdGUiOgogIC8vIFRPRE86IHNob3VsZCB0aGlzIHJlYWxseSBiZSBhIHNpbmdsZXRvbj8KICBzaW5nbGV0b24gZnJvbSAiTW9zdCBSZWNlbnQgTWVkaWNhdGlvbiBSZXF1ZXN0IGRvc2FnZUluc3RydWN0aW9uIi5kb3NlQW5kUmF0ZQoKZGVmaW5lICJNZWRpY2F0aW9uIERvc2UiOgogICJNb3N0IFJlY2VudCBNZWRpY2F0aW9uIFJlcXVlc3QgZG9zYWdlSW5zdHJ1Y3Rpb24uZG9zZUFuZFJhdGUiLmRvc2UKCmRlZmluZSAiTWVkaWNhdGlvbiBSb3V0ZSI6CiAgIk1vc3QgUmVjZW50IE1lZGljYXRpb24gUmVxdWVzdCBkb3NhZ2VJbnN0cnVjdGlvbiIucm91dGUKCmRlZmluZSAiTWVkaWNhdGlvbiBGcmVxdWVuY3kgdmFsdWUiOgogICJNb3N0IFJlY2VudCBNZWRpY2F0aW9uIFJlcXVlc3QgZG9zYWdlSW5zdHJ1Y3Rpb24iLnRpbWluZy5yZXBlYXQuZnJlcXVlbmN5CgpkZWZpbmUgIk1lZGljYXRpb24gRnJlcXVlbmN5IFBlcmlvZCI6CiAgaWYgKElzTnVsbCgiTW9zdCBSZWNlbnQgTWVkaWNhdGlvbiBSZXF1ZXN0IGRvc2FnZUluc3RydWN0aW9uIi50aW1pbmcucmVwZWF0LnBlcmlvZCkpIHRoZW4gCiAgICBudWxsCiAgZWxzZQogICAgU3lzdGVtLlF1YW50aXR5IHsKICAgICAgdmFsdWU6ICJNb3N0IFJlY2VudCBNZWRpY2F0aW9uIFJlcXVlc3QgZG9zYWdlSW5zdHJ1Y3Rpb24iLnRpbWluZy5yZXBlYXQucGVyaW9kLAogICAgICB1bml0OiAiTW9zdCBSZWNlbnQgTWVkaWNhdGlvbiBSZXF1ZXN0IGRvc2FnZUluc3RydWN0aW9uIi50aW1pbmcucmVwZWF0LnBlcmlvZFVuaXQKICAgIH0KCmRlZmluZSAiTWVkaWNhdGlvbiBGcmVxdWVuY3kiOiAvLyAnMXggcGVyIDFkJywgJzN4IHBlciAyd2snLCAnMXggcGVyIDFtbycKICBUb1N0cmluZygiTWVkaWNhdGlvbiBGcmVxdWVuY3kgdmFsdWUiKSArICd4JyArCiAgJyBwZXIgJyArIFRvU3RyaW5nKCJNZWRpY2F0aW9uIEZyZXF1ZW5jeSBQZXJpb2QiLnZhbHVlKSArIAogICcgJyArICJNZWRpY2F0aW9uIEZyZXF1ZW5jeSBQZXJpb2QiLnVuaXQKCmRlZmluZSAiUXVhbnRpdHkgb3IgTnVtYmVyIG9mIHJlcXVlc3RlZCBWaXNpdHMiOgogICJNb3N0IFJlY2VudCBNZWRpY2F0aW9uIFJlcXVlc3QiLmRpc3BlbnNlUmVxdWVzdC5xdWFudGl0eQoKZGVmaW5lICJQcmlvciBQcmVzY3JpcHRpb24iOgogICJNb3N0IFJlY2VudCBNZWRpY2F0aW9uIFJlcXVlc3QiLnByaW9yUHJlc2NyaXB0aW9uCgpkZWZpbmUgIk5ldyB0aGVyYXB5IjoKICBJc051bGwoIlByaW9yIFByZXNjcmlwdGlvbiIpCgpkZWZpbmUgIk5ldyB0aGVyYXB5IGNvZGUiOgogIGlmICgiTmV3IHRoZXJhcHkiKSB0aGVuCiAgICBTeXN0ZW0uQ29kZSB7IGNvZGU6ICdOZXdNZWRpY2F0aW9uJywgZGlzcGxheTogJ05ldyBNZWRpY2F0aW9uJyB9CiAgZWxzZQogICAgU3lzdGVtLkNvZGUgeyBjb2RlOiAnQ29udGludWVkVGhlcmFweScsIGRpc3BsYXk6ICdDb250aW51YXRpb24gb2YgdGhlcmFweScgfQoKLy8gTUlTU0lORzogbmVlZHMgdGVzdCBkYXRhIHRvIHZhbGlkYXRlCi8vSW5pdGlhbCBkYXRlIG9mIHRoZXJhcHkgZG9lcyBub3QgcmV0dXJuIGNvcnJlY3QgcmVzdWx0IGlmIHRoZXJlIGhhdmUgYmVlbiBtb3JlIHRoYW4gMSBwcmlvciBQcmVzY3JpcHRpb25zIC0gbG9naWMgbmVlZHMgdG8gYmUgYWRhcHRlZCB0byB0aGF0IGNhc2UKZGVmaW5lICJJbml0aWFsIGRhdGUgb2YgdGhlcmFweSI6CiAgaWYgbm90ICJOZXcgdGhlcmFweSIgdGhlbgogICAgVUNFLiJBbGwgTWVkaWNhdGlvbiBSZXF1ZXN0cyIgTQogICAgICB3aGVyZSBFbmRzV2l0aCgoIk1vc3QgUmVjZW50IE1lZGljYXRpb24gUmVxdWVzdCIucHJpb3JQcmVzY3JpcHRpb24gYXMgVVNDb3JlLlJlZmVyZW5jZSkucmVmZXJlbmNlLCBNLmlkKQogICAgICByZXR1cm4gTS5hdXRob3JlZE9uCiAgZWxzZSAKICAgIG51bGwKCmRlZmluZSAiTWVkaWNhdGlvbiBSZXF1ZXN0IFBlcmlvZCI6CiAgQ01ELiJNZWRpY2F0aW9uUmVxdWVzdFBlcmlvZCIoIk1vc3QgUmVjZW50IE1lZGljYXRpb24gUmVxdWVzdCIpCgpkZWZpbmUgIkV4cGVjdGVkIFRoZXJhcHkgTGVuZ3RoIjoKICBjb252ZXJ0KAogICAgQ01ELlF1YW50aXR5KGRheXMgYmV0d2VlbiBzdGFydCBvZiAiTWVkaWNhdGlvbiBSZXF1ZXN0IFBlcmlvZCIgYW5kIGVuZCBvZiAiTWVkaWNhdGlvbiBSZXF1ZXN0IFBlcmlvZCIsICdkJykKICApIHRvICdkJwoKZGVmaW5lICJBbnRpY2lwYXRlZC9hY3R1YWwgZGF0ZSBvZiBzZXJ2aWNlIjoKICBzdGFydCBvZiAiTWVkaWNhdGlvbiBSZXF1ZXN0IFBlcmlvZCIKCi8qCi8vcmVsYXRlZCBQcm9jZWR1cmVzIC0gUHJvY2VkdXJlIGlzIG5vdCBsaW5rZWQgdG8gbWVkaWNhdGlvbiByZXF1ZXN0IC0gbm90IHBvc3NpYmxlIHRvIGZpbmQgdGhlIHJlbGF0ZWQgcHJvY2VkdXJlcwoqLw=="/>
</content>
<content>
<contentType value="application/elm+xml"/>
</content>
</Library>