SMART DAK Cervical Cancer Screening
0.0.1 - ci-build

SMART DAK Cervical Cancer Screening, published by Dan Heslinga (independent contributor). This guide is not an authorized publication; it is the continuous build for version 0.0.1 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/dhes/smart-dak-cxca/ and changes regularly. See the Directory of published versions

: CXCAElements - XML Representation

Draft as of 2026-05-14

Raw xml | Download


<Library xmlns="http://hl7.org/fhir">
  <id value="CXCAElements"/>
  <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;">CXCAElements</td>
        </tr>
        

        
        
        <tr>
            <th scope="row"><b>Id: </b></th>
            <td style="padding-left: 4px;">CXCAElements</td>
        </tr>
        

        
        
        <tr>
            <th scope="row"><b>Version: </b></th>
            <td style="padding-left: 4px;">0.0.1</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Url: </b></th>
            <td style="padding-left: 4px;"><a href="Library-CXCAElements.html">CXCAElements</a></td>
        </tr>
        

        

        

        
        <tr>
            <th scope="row"><b>Status: </b></th>
            <td style="padding-left: 4px;">draft</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/7.1.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;">2026-05-14 00:50:23+0000</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Publisher: </b></th>
            <td style="padding-left: 4px;">Dan Heslinga (independent contributor)</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Description: </b></th>
            <td style="padding-left: 4px;"><div><p>Shared CQL elements library for the cervical cancer screening DAK. Provides per-patient predicates and counts derived from FHIR resources (Patient, Procedure, Observation, ServiceRequest); consumed by both CDS-side Logic libraries and eCQM-side Indicator libraries to materialize the harmonization pattern from the eCQM/CDS paper. Source CQL is at input/cql/CXCAElements.cql.</p>
</div></td>
        </tr>
        

        

        

        

        

        

        

        

        

        

        

        

        
        <tr>
          <th scope="row"><b>Parameters: </b></th>
          <td style="padding-left: 4px;">
            <table class="grid-dict">
              <tr><th><b>Name</b></th><th><b>Type</b></th><th><b>Min</b></th><th><b>Max</b></th><th><b>In/Out</b></th></tr>
              
                <tr><th>Patient</th><th>Patient</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Current Patient Age In Years</th><th>integer</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Hysterectomy Procedures</th><th>Procedure</th><th>0</th><th>*</th><th>Out</th></tr>
              
                <tr><th>Has Had Hysterectomy</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
            </table>
          </td>
        </tr>
        

        
        <tr>
          <th scope="row"><b>Data Requirements:</b></th>
          <td style="padding-left: 4px;">
            <table class="grid-dict">
              <tr><th><b>Type</b></th><th><b>Profile</b></th><th><b>MS</b></th><th><b>Code Filter</b></th></tr>
              
                <tr>
                  <th>Procedure</th>
                  <th>http://hl7.org/fhir/StructureDefinition/Procedure</th>
                  <th/>
                  <th>
                    
                  </th>
                </tr>
              
            </table>
          </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: CXCAElements
 *
 * THE HARMONIZATION LAYER.
 *
 * A shared CQL library that provides per-patient predicates and counts derived
 * from FHIR resources, consumed by both the CDS-side Logic libraries (e.g.,
 * CXCAD2DTScreeningEligibilityLogic) and the eCQM-side Indicator libraries
 * (e.g., CXCAIND01Logic). The defines below are the single source of truth
 * for what counts as &quot;an HPV+ result,&quot; &quot;a documented hysterectomy,&quot; etc.
 *
 * METHODOLOGY POINT (the harmonization paper distilled):
 *
 *   When CDS asks &quot;is this patient due for screening today?&quot; and an eCQM asks
 *   &quot;what % of the cohort got screened in the period?&quot;, they ask different
 *   *aggregations* of the same underlying clinical fact: &quot;did this patient
 *   get screened?&quot; If both consumers compute that fact independently, they
 *   can drift — and the report stops aligning with the rule that drove the
 *   care. The fix is to define the underlying fact ONCE in a shared layer
 *   and have both consumers reference it.
 *
 *   IMMZ realizes this with `IMMZElements` and disease-specific
 *   `IMMZD2DTMeasles*Elements` libraries. We mirror that pattern here.
 *
 * Phase 5 chunk 8 — initial demonstration set. Currently only &quot;Has Had
 * Hysterectomy&quot; is materialized as a real FHIR query (Procedure with
 * CXCA.D#DE45). Subsequent iterations will add:
 *   - Per-period HPV result existence (with positive/negative value check)
 *   - Per-period cytology result existence (with Bethesda value check)
 *   - Per-period HPV-not-done existence (the Phase 4 NotDone pattern)
 *   - Time-window helpers (hasResultWithin, isExpectedButMissingFor)
 *
 * Each new define replaces a placeholder Boolean parameter in a downstream
 * library — this is the per-iteration migration path from placeholder-CQL
 * to real-FHIR-query-CQL.
 */

library CXCAElements version '0.0.1'

using FHIR version '4.0.1'

include FHIRHelpers version '4.0.1'

context Patient

// =============================================================================
// Patient demographics
// =============================================================================

/*
 * Current patient age in years.
 */
define &quot;Current Patient Age In Years&quot;:
  AgeInYears()

// =============================================================================
// Hysterectomy history
// =============================================================================

/*
 * @internal: All recorded hysterectomy procedures for this patient,
 *   filtered to status = completed.
 */
define &quot;Hysterectomy Procedures&quot;:
  [Procedure] P
    where P.status = 'completed'
      and exists (P.code.coding C where C.code = 'DE45'
                                     and C.system = 'http://smart.who.int/cxca/CodeSystem/CXCA.D')

/*
 * The patient has a documented completed hysterectomy.
 *
 * NOTE: A/641 section 2.2 only excludes hysterectomy for non-cervical-cancer indication
 * with a documented negative post-op vaginal-smear cytology. This define
 * captures only the hysterectomy fact; the indication and post-op cytology
 * checks live in higher-layer logic that combines this define with others.
 */
define &quot;Has Had Hysterectomy&quot;:
  exists &quot;Hysterectomy Procedures&quot;
</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>Encoded data (20720 characters)</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/cxca/Library/CXCAElements"/>
  <version value="0.0.1"/>
  <name value="CXCAElements"/>
  <title value="CXCAElements"/>
  <status value="draft"/>
  <experimental value="false"/>
  <type>
    <coding>
      <system value="http://terminology.hl7.org/CodeSystem/library-type"/>
      <code value="logic-library"/>
    </coding>
  </type>
  <date value="2026-05-14T00:50:23+00:00"/>
  <publisher value="Dan Heslinga (independent contributor)"/>
  <contact>
    <name value="Dan Heslinga (independent contributor)"/>
    <telecom>
      <system value="url"/>
      <value value="https://github.com/dhes"/>
    </telecom>
  </contact>
  <description
               value="Shared CQL elements library for the cervical cancer screening DAK. Provides per-patient predicates and counts derived from FHIR resources (Patient, Procedure, Observation, ServiceRequest); consumed by both CDS-side Logic libraries and eCQM-side Indicator libraries to materialize the harmonization pattern from the eCQM/CDS paper. Source CQL is at input/cql/CXCAElements.cql."/>
  <parameter>
    <name value="Patient"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Patient"/>
  </parameter>
  <parameter>
    <name value="Current Patient Age In Years"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="integer"/>
  </parameter>
  <parameter>
    <name value="Hysterectomy Procedures"/>
    <use value="out"/>
    <min value="0"/>
    <max value="*"/>
    <type value="Procedure"/>
  </parameter>
  <parameter>
    <name value="Has Had Hysterectomy"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <dataRequirement>
    <type value="Procedure"/>
    <profile value="http://hl7.org/fhir/StructureDefinition/Procedure"/>
  </dataRequirement>
  <content>
    <contentType value="text/cql"/>
    <data
          value="LyoKICogTGlicmFyeTogQ1hDQUVsZW1lbnRzCiAqCiAqIFRIRSBIQVJNT05JWkFUSU9OIExBWUVSLgogKgogKiBBIHNoYXJlZCBDUUwgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHBlci1wYXRpZW50IHByZWRpY2F0ZXMgYW5kIGNvdW50cyBkZXJpdmVkCiAqIGZyb20gRkhJUiByZXNvdXJjZXMsIGNvbnN1bWVkIGJ5IGJvdGggdGhlIENEUy1zaWRlIExvZ2ljIGxpYnJhcmllcyAoZS5nLiwKICogQ1hDQUQyRFRTY3JlZW5pbmdFbGlnaWJpbGl0eUxvZ2ljKSBhbmQgdGhlIGVDUU0tc2lkZSBJbmRpY2F0b3IgbGlicmFyaWVzCiAqIChlLmcuLCBDWENBSU5EMDFMb2dpYykuIFRoZSBkZWZpbmVzIGJlbG93IGFyZSB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aAogKiBmb3Igd2hhdCBjb3VudHMgYXMgImFuIEhQVisgcmVzdWx0LCIgImEgZG9jdW1lbnRlZCBoeXN0ZXJlY3RvbXksIiBldGMuCiAqCiAqIE1FVEhPRE9MT0dZIFBPSU5UICh0aGUgaGFybW9uaXphdGlvbiBwYXBlciBkaXN0aWxsZWQpOgogKgogKiAgIFdoZW4gQ0RTIGFza3MgImlzIHRoaXMgcGF0aWVudCBkdWUgZm9yIHNjcmVlbmluZyB0b2RheT8iIGFuZCBhbiBlQ1FNIGFza3MKICogICAid2hhdCAlIG9mIHRoZSBjb2hvcnQgZ290IHNjcmVlbmVkIGluIHRoZSBwZXJpb2Q/IiwgdGhleSBhc2sgZGlmZmVyZW50CiAqICAgKmFnZ3JlZ2F0aW9ucyogb2YgdGhlIHNhbWUgdW5kZXJseWluZyBjbGluaWNhbCBmYWN0OiAiZGlkIHRoaXMgcGF0aWVudAogKiAgIGdldCBzY3JlZW5lZD8iIElmIGJvdGggY29uc3VtZXJzIGNvbXB1dGUgdGhhdCBmYWN0IGluZGVwZW5kZW50bHksIHRoZXkKICogICBjYW4gZHJpZnQg4oCUIGFuZCB0aGUgcmVwb3J0IHN0b3BzIGFsaWduaW5nIHdpdGggdGhlIHJ1bGUgdGhhdCBkcm92ZSB0aGUKICogICBjYXJlLiBUaGUgZml4IGlzIHRvIGRlZmluZSB0aGUgdW5kZXJseWluZyBmYWN0IE9OQ0UgaW4gYSBzaGFyZWQgbGF5ZXIKICogICBhbmQgaGF2ZSBib3RoIGNvbnN1bWVycyByZWZlcmVuY2UgaXQuCiAqCiAqICAgSU1NWiByZWFsaXplcyB0aGlzIHdpdGggYElNTVpFbGVtZW50c2AgYW5kIGRpc2Vhc2Utc3BlY2lmaWMKICogICBgSU1NWkQyRFRNZWFzbGVzKkVsZW1lbnRzYCBsaWJyYXJpZXMuIFdlIG1pcnJvciB0aGF0IHBhdHRlcm4gaGVyZS4KICoKICogUGhhc2UgNSBjaHVuayA4IOKAlCBpbml0aWFsIGRlbW9uc3RyYXRpb24gc2V0LiBDdXJyZW50bHkgb25seSAiSGFzIEhhZAogKiBIeXN0ZXJlY3RvbXkiIGlzIG1hdGVyaWFsaXplZCBhcyBhIHJlYWwgRkhJUiBxdWVyeSAoUHJvY2VkdXJlIHdpdGgKICogQ1hDQS5EI0RFNDUpLiBTdWJzZXF1ZW50IGl0ZXJhdGlvbnMgd2lsbCBhZGQ6CiAqICAgLSBQZXItcGVyaW9kIEhQViByZXN1bHQgZXhpc3RlbmNlICh3aXRoIHBvc2l0aXZlL25lZ2F0aXZlIHZhbHVlIGNoZWNrKQogKiAgIC0gUGVyLXBlcmlvZCBjeXRvbG9neSByZXN1bHQgZXhpc3RlbmNlICh3aXRoIEJldGhlc2RhIHZhbHVlIGNoZWNrKQogKiAgIC0gUGVyLXBlcmlvZCBIUFYtbm90LWRvbmUgZXhpc3RlbmNlICh0aGUgUGhhc2UgNCBOb3REb25lIHBhdHRlcm4pCiAqICAgLSBUaW1lLXdpbmRvdyBoZWxwZXJzIChoYXNSZXN1bHRXaXRoaW4sIGlzRXhwZWN0ZWRCdXRNaXNzaW5nRm9yKQogKgogKiBFYWNoIG5ldyBkZWZpbmUgcmVwbGFjZXMgYSBwbGFjZWhvbGRlciBCb29sZWFuIHBhcmFtZXRlciBpbiBhIGRvd25zdHJlYW0KICogbGlicmFyeSDigJQgdGhpcyBpcyB0aGUgcGVyLWl0ZXJhdGlvbiBtaWdyYXRpb24gcGF0aCBmcm9tIHBsYWNlaG9sZGVyLUNRTAogKiB0byByZWFsLUZISVItcXVlcnktQ1FMLgogKi8KCmxpYnJhcnkgQ1hDQUVsZW1lbnRzIHZlcnNpb24gJzAuMC4xJwoKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnCgpjb250ZXh0IFBhdGllbnQKCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIFBhdGllbnQgZGVtb2dyYXBoaWNzCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovKgogKiBDdXJyZW50IHBhdGllbnQgYWdlIGluIHllYXJzLgogKi8KZGVmaW5lICJDdXJyZW50IFBhdGllbnQgQWdlIEluIFllYXJzIjoKICBBZ2VJblllYXJzKCkKCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIEh5c3RlcmVjdG9teSBoaXN0b3J5Ci8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovKgogKiBAaW50ZXJuYWw6IEFsbCByZWNvcmRlZCBoeXN0ZXJlY3RvbXkgcHJvY2VkdXJlcyBmb3IgdGhpcyBwYXRpZW50LAogKiAgIGZpbHRlcmVkIHRvIHN0YXR1cyA9IGNvbXBsZXRlZC4KICovCmRlZmluZSAiSHlzdGVyZWN0b215IFByb2NlZHVyZXMiOgogIFtQcm9jZWR1cmVdIFAKICAgIHdoZXJlIFAuc3RhdHVzID0gJ2NvbXBsZXRlZCcKICAgICAgYW5kIGV4aXN0cyAoUC5jb2RlLmNvZGluZyBDIHdoZXJlIEMuY29kZSA9ICdERTQ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIEMuc3lzdGVtID0gJ2h0dHA6Ly9zbWFydC53aG8uaW50L2N4Y2EvQ29kZVN5c3RlbS9DWENBLkQnKQoKLyoKICogVGhlIHBhdGllbnQgaGFzIGEgZG9jdW1lbnRlZCBjb21wbGV0ZWQgaHlzdGVyZWN0b215LgogKgogKiBOT1RFOiBBLzY0MSBzZWN0aW9uIDIuMiBvbmx5IGV4Y2x1ZGVzIGh5c3RlcmVjdG9teSBmb3Igbm9uLWNlcnZpY2FsLWNhbmNlciBpbmRpY2F0aW9uCiAqIHdpdGggYSBkb2N1bWVudGVkIG5lZ2F0aXZlIHBvc3Qtb3AgdmFnaW5hbC1zbWVhciBjeXRvbG9neS4gVGhpcyBkZWZpbmUKICogY2FwdHVyZXMgb25seSB0aGUgaHlzdGVyZWN0b215IGZhY3Q7IHRoZSBpbmRpY2F0aW9uIGFuZCBwb3N0LW9wIGN5dG9sb2d5CiAqIGNoZWNrcyBsaXZlIGluIGhpZ2hlci1sYXllciBsb2dpYyB0aGF0IGNvbWJpbmVzIHRoaXMgZGVmaW5lIHdpdGggb3RoZXJzLgogKi8KZGVmaW5lICJIYXMgSGFkIEh5c3RlcmVjdG9teSI6CiAgZXhpc3RzICJIeXN0ZXJlY3RvbXkgUHJvY2VkdXJlcyIK"/>
  </content>
  <content>
    <contentType value="application/elm+xml"/>
    <data
          value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSIgbG9jYWxJZD0iMCI+CiAgIDxhbm5vdGF0aW9uIHRyYW5zbGF0b3JPcHRpb25zPSJFbmFibGVBbm5vdGF0aW9ucyxFbmFibGVMb2NhdG9ycyxEaXNhYmxlTGlzdERlbW90aW9uLERpc2FibGVMaXN0UHJvbW90aW9uIiBzaWduYXR1cmVMZXZlbD0iT3ZlcmxvYWRzIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUluZm8iLz4KICAgPGFubm90YXRpb24gbWVzc2FnZT0iQW4gb3BlcmFuZCBpZGVudGlmaWVyIHJlZmVyZW5jZSBpcyBoaWRpbmcgYW5vdGhlciBpZGVudGlmaWVyIG9mIHRoZSBzYW1lIG5hbWUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIG1lc3NhZ2U9IkFuIG9wZXJhbmQgaWRlbnRpZmllciByZWZlcmVuY2UgaXMgaGlkaW5nIGFub3RoZXIgaWRlbnRpZmllciBvZiB0aGUgc2FtZSBuYW1lLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBtZXNzYWdlPSJBbiBvcGVyYW5kIGlkZW50aWZpZXIgcmVmZXJlbmNlIGlzIGhpZGluZyBhbm90aGVyIGlkZW50aWZpZXIgb2YgdGhlIHNhbWUgbmFtZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgIDxhOnMgcj0iMjY4Ij4KICAgICAgICAgPGE6cz4vKgogKiBMaWJyYXJ5OiBDWENBRWxlbWVudHMKICoKICogVEhFIEhBUk1PTklaQVRJT04gTEFZRVIuCiAqCiAqIEEgc2hhcmVkIENRTCBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgcGVyLXBhdGllbnQgcHJlZGljYXRlcyBhbmQgY291bnRzIGRlcml2ZWQKICogZnJvbSBGSElSIHJlc291cmNlcywgY29uc3VtZWQgYnkgYm90aCB0aGUgQ0RTLXNpZGUgTG9naWMgbGlicmFyaWVzIChlLmcuLAogKiBDWENBRDJEVFNjcmVlbmluZ0VsaWdpYmlsaXR5TG9naWMpIGFuZCB0aGUgZUNRTS1zaWRlIEluZGljYXRvciBsaWJyYXJpZXMKICogKGUuZy4sIENYQ0FJTkQwMUxvZ2ljKS4gVGhlIGRlZmluZXMgYmVsb3cgYXJlIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoCiAqIGZvciB3aGF0IGNvdW50cyBhcyAmcXVvdDthbiBIUFYrIHJlc3VsdCwmcXVvdDsgJnF1b3Q7YSBkb2N1bWVudGVkIGh5c3RlcmVjdG9teSwmcXVvdDsgZXRjLgogKgogKiBNRVRIT0RPTE9HWSBQT0lOVCAodGhlIGhhcm1vbml6YXRpb24gcGFwZXIgZGlzdGlsbGVkKToKICoKICogICBXaGVuIENEUyBhc2tzICZxdW90O2lzIHRoaXMgcGF0aWVudCBkdWUgZm9yIHNjcmVlbmluZyB0b2RheT8mcXVvdDsgYW5kIGFuIGVDUU0gYXNrcwogKiAgICZxdW90O3doYXQgJSBvZiB0aGUgY29ob3J0IGdvdCBzY3JlZW5lZCBpbiB0aGUgcGVyaW9kPyZxdW90OywgdGhleSBhc2sgZGlmZmVyZW50CiAqICAgKmFnZ3JlZ2F0aW9ucyogb2YgdGhlIHNhbWUgdW5kZXJseWluZyBjbGluaWNhbCBmYWN0OiAmcXVvdDtkaWQgdGhpcyBwYXRpZW50CiAqICAgZ2V0IHNjcmVlbmVkPyZxdW90OyBJZiBib3RoIGNvbnN1bWVycyBjb21wdXRlIHRoYXQgZmFjdCBpbmRlcGVuZGVudGx5LCB0aGV5CiAqICAgY2FuIGRyaWZ0IOKAlCBhbmQgdGhlIHJlcG9ydCBzdG9wcyBhbGlnbmluZyB3aXRoIHRoZSBydWxlIHRoYXQgZHJvdmUgdGhlCiAqICAgY2FyZS4gVGhlIGZpeCBpcyB0byBkZWZpbmUgdGhlIHVuZGVybHlpbmcgZmFjdCBPTkNFIGluIGEgc2hhcmVkIGxheWVyCiAqICAgYW5kIGhhdmUgYm90aCBjb25zdW1lcnMgcmVmZXJlbmNlIGl0LgogKgogKiAgIElNTVogcmVhbGl6ZXMgdGhpcyB3aXRoIGBJTU1aRWxlbWVudHNgIGFuZCBkaXNlYXNlLXNwZWNpZmljCiAqICAgYElNTVpEMkRUTWVhc2xlcypFbGVtZW50c2AgbGlicmFyaWVzLiBXZSBtaXJyb3IgdGhhdCBwYXR0ZXJuIGhlcmUuCiAqCiAqIFBoYXNlIDUgY2h1bmsgOCDigJQgaW5pdGlhbCBkZW1vbnN0cmF0aW9uIHNldC4gQ3VycmVudGx5IG9ubHkgJnF1b3Q7SGFzIEhhZAogKiBIeXN0ZXJlY3RvbXkmcXVvdDsgaXMgbWF0ZXJpYWxpemVkIGFzIGEgcmVhbCBGSElSIHF1ZXJ5IChQcm9jZWR1cmUgd2l0aAogKiBDWENBLkQjREU0NSkuIFN1YnNlcXVlbnQgaXRlcmF0aW9ucyB3aWxsIGFkZDoKICogICAtIFBlci1wZXJpb2QgSFBWIHJlc3VsdCBleGlzdGVuY2UgKHdpdGggcG9zaXRpdmUvbmVnYXRpdmUgdmFsdWUgY2hlY2spCiAqICAgLSBQZXItcGVyaW9kIGN5dG9sb2d5IHJlc3VsdCBleGlzdGVuY2UgKHdpdGggQmV0aGVzZGEgdmFsdWUgY2hlY2spCiAqICAgLSBQZXItcGVyaW9kIEhQVi1ub3QtZG9uZSBleGlzdGVuY2UgKHRoZSBQaGFzZSA0IE5vdERvbmUgcGF0dGVybikKICogICAtIFRpbWUtd2luZG93IGhlbHBlcnMgKGhhc1Jlc3VsdFdpdGhpbiwgaXNFeHBlY3RlZEJ1dE1pc3NpbmdGb3IpCiAqCiAqIEVhY2ggbmV3IGRlZmluZSByZXBsYWNlcyBhIHBsYWNlaG9sZGVyIEJvb2xlYW4gcGFyYW1ldGVyIGluIGEgZG93bnN0cmVhbQogKiBsaWJyYXJ5IOKAlCB0aGlzIGlzIHRoZSBwZXItaXRlcmF0aW9uIG1pZ3JhdGlvbiBwYXRoIGZyb20gcGxhY2Vob2xkZXItQ1FMCiAqIHRvIHJlYWwtRkhJUi1xdWVyeS1DUUwuCiAqLwoKbGlicmFyeSBDWENBRWxlbWVudHMgdmVyc2lvbiAnMC4wLjEnPC9hOnM+CiAgICAgIDwvYTpzPgogICA8L2Fubm90YXRpb24+CiAgIDxpZGVudGlmaWVyIGlkPSJDWENBRWxlbWVudHMiIHN5c3RlbT0iaHR0cDovL3NtYXJ0Lndoby5pbnQvY3hjYSIgdmVyc2lvbj0iMC4wLjEiLz4KICAgPHNjaGVtYUlkZW50aWZpZXIgaWQ9InVybjpobDctb3JnOmVsbSIgdmVyc2lvbj0icjEiLz4KICAgPHVzaW5ncz4KICAgICAgPGRlZiBsb2NhbElkPSIxIiBsb2NhbElkZW50aWZpZXI9IlN5c3RlbSIgdXJpPSJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEiIHZlcnNpb249IjEuMC4wIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjA2IiBsb2NhdG9yPSI0MDoxLTQwOjI2IiBsb2NhbElkZW50aWZpZXI9IkZISVIiIHVyaT0iaHR0cDovL2hsNy5vcmcvZmhpciIgdmVyc2lvbj0iNC4wLjEiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyMDYiPgogICAgICAgICAgICAgICA8YTpzPnVzaW5nIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICA8YTpzPkZISVI8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+IHZlcnNpb24gJzQuMC4xJzwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICA8L2RlZj4KICAgPC91c2luZ3M+CiAgIDxpbmNsdWRlcz4KICAgICAgPGRlZiBsb2NhbElkPSIyMDgiIGxvY2F0b3I9IjQyOjEtNDI6MzUiIGxvY2FsSWRlbnRpZmllcj0iRkhJUkhlbHBlcnMiIHBhdGg9Imh0dHA6Ly9obDcub3JnL2ZoaXIvRkhJUkhlbHBlcnMiIHZlcnNpb249IjQuMC4xIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMjA4Ij4KICAgICAgICAgICAgICAgPGE6cz5pbmNsdWRlIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICA8YTpzPkZISVJIZWxwZXJzPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPiB2ZXJzaW9uICc0LjAuMSc8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgPC9kZWY+CiAgIDwvaW5jbHVkZXM+CiAgIDxjb250ZXh0cz4KICAgICAgPGRlZiBsb2NhbElkPSIyMTMiIGxvY2F0b3I9IjQ0OjEtNDQ6MTUiIG5hbWU9IlBhdGllbnQiLz4KICAgPC9jb250ZXh0cz4KICAgPHN0YXRlbWVudHM+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjExIiBsb2NhdG9yPSI0NDoxLTQ0OjE1IiBuYW1lPSJQYXRpZW50IiBjb250ZXh0PSJQYXRpZW50Ij4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjEyIiB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIxMCIgbG9jYXRvcj0iNDQ6MS00NDoxNSIgZGF0YVR5cGU9ImZoaXI6UGF0aWVudCIgdGVtcGxhdGVJZD0iaHR0cDovL2hsNy5vcmcvZmhpci9TdHJ1Y3R1cmVEZWZpbml0aW9uL1BhdGllbnQiIHhzaTp0eXBlPSJSZXRyaWV2ZSIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIxNiIgbG9jYXRvcj0iNTM6MS01NDoxNCIgbmFtZT0iQ3VycmVudCBQYXRpZW50IEFnZSBJbiBZZWFycyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjIxNiI+CiAgICAgICAgICAgICAgIDxhOnM+Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gUGF0aWVudCBkZW1vZ3JhcGhpY3MKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8qCiAqIEN1cnJlbnQgcGF0aWVudCBhZ2UgaW4geWVhcnMuCiAqLwpkZWZpbmUgJnF1b3Q7Q3VycmVudCBQYXRpZW50IEFnZSBJbiBZZWFycyZxdW90OzoKICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyMjEiPgogICAgICAgICAgICAgICAgICA8YTpzPkFnZUluWWVhcnMoKTwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjIxIiBsb2NhdG9yPSI1NDozLTU0OjE0IiBwcmVjaXNpb249IlllYXIiIHhzaTp0eXBlPSJDYWxjdWxhdGVBZ2UiPgogICAgICAgICAgICA8c2lnbmF0dXJlIGxvY2FsSWQ9IjIyMiIgbmFtZT0idDpEYXRlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIyMCIgcGF0aD0iYmlydGhEYXRlLnZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjIxOSIgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIyNSIgbG9jYXRvcj0iNjQ6MS02ODo5OCIgbmFtZT0iSHlzdGVyZWN0b215IFByb2NlZHVyZXMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6dCBuYW1lPSJpbnRlcm5hbCIgdmFsdWU9IkFsbCByZWNvcmRlZCBoeXN0ZXJlY3RvbXkgcHJvY2VkdXJlcyBmb3IgdGhpcyBwYXRpZW50LCYjeGE7ZmlsdGVyZWQgdG8gc3RhdHVzID0gY29tcGxldGVkLiIvPgogICAgICAgICAgICA8YTpzIHI9IjIyNSI+CiAgICAgICAgICAgICAgIDxhOnM+Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gSHlzdGVyZWN0b215IGhpc3RvcnkKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8qCiAqIEBpbnRlcm5hbDogQWxsIHJlY29yZGVkIGh5c3RlcmVjdG9teSBwcm9jZWR1cmVzIGZvciB0aGlzIHBhdGllbnQsCiAqICAgZmlsdGVyZWQgdG8gc3RhdHVzID0gY29tcGxldGVkLgogKi8KZGVmaW5lICZxdW90O0h5c3RlcmVjdG9teSBQcm9jZWR1cmVzJnF1b3Q7OgogIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjI2NSI+CiAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZV08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4KICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyOSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgIGFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0cyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QLmNvZGUuY29kaW5nPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gQzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5DPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNvZGU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J0RFNDUnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5DPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN5c3RlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4naHR0cDovL3NtYXJ0Lndoby5pbnQvY3hjYS9Db2RlU3lzdGVtL0NYQ0EuRCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyNjUiIGxvY2F0b3I9IjY1OjMtNjg6OTgiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjI2IiBsb2NhdG9yPSI2NTozLTY1OjE1IiBhbGlhcz0iUCI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIyNyIgbG9jYXRvcj0iNjU6My02NToxMyIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiB0ZW1wbGF0ZUlkPSJodHRwOi8vaGw3Lm9yZy9maGlyL1N0cnVjdHVyZURlZmluaXRpb24vUHJvY2VkdXJlIiB4c2k6dHlwZT0iUmV0cmlldmUiLz4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIyMjkiIGxvY2F0b3I9IjY2OjUtNjg6OTgiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMzAiIGxvY2F0b3I9IjY2OjExLTY2OjMyIiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICA8c2lnbmF0dXJlIGxvY2FsSWQ9IjIzNyIgbmFtZT0idDpTdHJpbmciIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgPHNpZ25hdHVyZSBsb2NhbElkPSIyMzgiIG5hbWU9InQ6U3RyaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzNSIgbmFtZT0iVG9TdHJpbmciIGxpYnJhcnlOYW1lPSJGSElSSGVscGVycyIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgPHNpZ25hdHVyZSBsb2NhbElkPSIyMzYiIG5hbWU9ImZoaXI6UHJvY2VkdXJlU3RhdHVzIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzMiIgbG9jYXRvcj0iNjY6MTEtNjY6MTgiIHBhdGg9InN0YXR1cyIgc2NvcGU9IlAiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzMyIgbG9jYXRvcj0iNjY6MjItNjY6MzIiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjM5IiBsb2NhdG9yPSI2NzoxMS02ODo5OCIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI2NCIgbG9jYXRvcj0iNjc6MTgtNjg6OTgiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjQwIiBsb2NhdG9yPSI2NzoxOS02NzozMyIgYWxpYXM9IkMiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyNDMiIGxvY2F0b3I9IjY3OjE5LTY3OjMxIiBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjQyIiBwYXRoPSJjb2RlIiBzY29wZT0iUCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIyNDUiIGxvY2F0b3I9IjY3OjM1LTY4Ojk3IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjQ2IiBsb2NhdG9yPSI2Nzo0MS02Nzo1NSIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpZ25hdHVyZSBsb2NhbElkPSIyNTMiIG5hbWU9InQ6U3RyaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaWduYXR1cmUgbG9jYWxJZD0iMjU0IiBuYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNTEiIG5hbWU9IlRvU3RyaW5nIiBsaWJyYXJ5TmFtZT0iRkhJUkhlbHBlcnMiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaWduYXR1cmUgbG9jYWxJZD0iMjUyIiBuYW1lPSJmaGlyOnN0cmluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNDgiIGxvY2F0b3I9IjY3OjQxLTY3OjQ2IiBwYXRoPSJjb2RlIiBzY29wZT0iQyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjQ5IiBsb2NhdG9yPSI2Nzo1MC02Nzo1NSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IkRFNDUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjU1IiBsb2NhdG9yPSI2ODo0Mi02ODo5NyIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpZ25hdHVyZSBsb2NhbElkPSIyNjIiIG5hbWU9InQ6U3RyaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaWduYXR1cmUgbG9jYWxJZD0iMjYzIiBuYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjAiIG5hbWU9IlRvU3RyaW5nIiBsaWJyYXJ5TmFtZT0iRkhJUkhlbHBlcnMiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaWduYXR1cmUgbG9jYWxJZD0iMjYxIiBuYW1lPSJmaGlyOnVyaSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNTciIGxvY2F0b3I9IjY4OjQyLTY4OjQ5IiBwYXRoPSJzeXN0ZW0iIHNjb3BlPSJDIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNTgiIGxvY2F0b3I9IjY4OjUzLTY4Ojk3IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iaHR0cDovL3NtYXJ0Lndoby5pbnQvY3hjYS9Db2RlU3lzdGVtL0NYQ0EuRCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIyNjgiIGxvY2F0b3I9Ijc4OjEtNzk6MzQiIG5hbWU9IkhhcyBIYWQgSHlzdGVyZWN0b215IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMjY4Ij4KICAgICAgICAgICAgICAgPGE6cz4vKgogKiBUaGUgcGF0aWVudCBoYXMgYSBkb2N1bWVudGVkIGNvbXBsZXRlZCBoeXN0ZXJlY3RvbXkuCiAqCiAqIE5PVEU6IEEvNjQxIHNlY3Rpb24gMi4yIG9ubHkgZXhjbHVkZXMgaHlzdGVyZWN0b215IGZvciBub24tY2VydmljYWwtY2FuY2VyIGluZGljYXRpb24KICogd2l0aCBhIGRvY3VtZW50ZWQgbmVnYXRpdmUgcG9zdC1vcCB2YWdpbmFsLXNtZWFyIGN5dG9sb2d5LiBUaGlzIGRlZmluZQogKiBjYXB0dXJlcyBvbmx5IHRoZSBoeXN0ZXJlY3RvbXkgZmFjdDsgdGhlIGluZGljYXRpb24gYW5kIHBvc3Qtb3AgY3l0b2xvZ3kKICogY2hlY2tzIGxpdmUgaW4gaGlnaGVyLWxheWVyIGxvZ2ljIHRoYXQgY29tYmluZXMgdGhpcyBkZWZpbmUgd2l0aCBvdGhlcnMuCiAqLwpkZWZpbmUgJnF1b3Q7SGFzIEhhZCBIeXN0ZXJlY3RvbXkmcXVvdDs6CiAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjY5Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHMgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjcwIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtIeXN0ZXJlY3RvbXkgUHJvY2VkdXJlcyZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI2OSIgbG9jYXRvcj0iNzk6My03OTozNCIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxzaWduYXR1cmUgbG9jYWxJZD0iMjcxIiB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbG9jYWxJZD0iMjcyIiBuYW1lPSJmaGlyOlByb2NlZHVyZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICA8L3NpZ25hdHVyZT4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjcwIiBsb2NhdG9yPSI3OToxMC03OTozNCIgbmFtZT0iSHlzdGVyZWN0b215IFByb2NlZHVyZXMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgIDwvc3RhdGVtZW50cz4KPC9saWJyYXJ5Pgo="/>
  </content>
</Library>