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

: CXCAD2DTHPVResultRoutingLogic - XML Representation

Draft as of 2026-05-14

Raw xml | Download


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

        
        
        <tr>
            <th scope="row"><b>Id: </b></th>
            <td style="padding-left: 4px;">CXCAD2DTHPVResultRoutingLogic</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-CXCAD2DTHPVResultRoutingLogic.html">CXCAD2DTHPVResultRoutingLogic</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>CQL logic library for routing decisions after an HPV high-risk DNA test result returns. Implements the three-outcome decision tree from A/641 (2020) Fig 2.4: HPV negative → routine; HPV+ with negative cytology → repeat HPV in 12 months; HPV+ with cytology ≥ ASC-US → refer to colposcopy. Source CQL is at input/cql/CXCAD2DTHPVResultRoutingLogic.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>HPVResultPositive</th><th>boolean</th><th>0</th><th>1</th><th>In</th></tr>
              
                <tr><th>CytologyResultASCUSorWorse</th><th>boolean</th><th>0</th><th>1</th><th>In</th></tr>
              
                <tr><th>Patient</th><th>Patient</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Route — HPV negative, return to routine</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Route — HPV+, cytology negative, repeat HPV in 12 months</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Route — HPV+, cytology ≥ ASC-US, refer to colposcopy</th><th>boolean</th><th>0</th><th>1</th><th>Out</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: CXCAD2DTHPVResultRoutingLogic
 *
 * Decision: What to do with a returned HPV high-risk DNA test result
 * L2 Source: A/641 (2020) Fig 2.4 — HPV pathway result routing tree
 * Trigger: HPV result available for an HPV-screened patient
 *
 * THE ROUTING TREE:
 *
 *   HPV result returns
 *      ↓
 *   ┌──────────────────────────────────┐
 *   │ HPV negative                     │ → return to routine screening
 *   ├──────────────────────────────────┤
 *   │ HPV positive                     │ → re-read the saved cytology slide
 *   │   ↓                              │
 *   │   Cytology &lt; ASC-US (NILM)       │ → repeat HPV in 12 months
 *   │   ↓ (then if HPV+ again)         │
 *   │   → refer to colposcopy          │
 *   │                                  │
 *   │   Cytology ≥ ASC-US              │ → refer to colposcopy directly
 *   └──────────────────────────────────┘
 *
 * This library encodes the IMMEDIATE three-outcome decision (HPV negative /
 * HPV+ with negative cytology / HPV+ with abnormal cytology). The 12-month
 * repeat-HPV cycle is encoded as the routing outcome; tracking and timer-
 * based recall happens via the recall/scheduling layer (chunk 7 — deferred).
 *
 * Each routing outcome maps to a CXCA.D code (DE34/DE35/DE36).
 */

library CXCAD2DTHPVResultRoutingLogic version '0.0.1'

using FHIR version '4.0.1'

include FHIRHelpers version '4.0.1'

// Placeholders — to be replaced with FHIR queries via the shared CXCAElements
// layer. Real implementation:
//   HPVResultPositive: Observation with code = CXCA.D#DE3 and value = CXCA.D#DE8
//   CytologyResultASCUSorWorse: Observation with code = CXCA.D#DE13 and value
//     in {DE30 ASC-US, DE31 ASC-H, DE32 LSIL, DE33 HSIL} (Bethesda ≥ ASC-US)
parameter &quot;HPVResultPositive&quot; Boolean default false
parameter &quot;CytologyResultASCUSorWorse&quot; Boolean default false

context Patient

// =============================================================================
// Routing rules — three mutually-exclusive outcomes per A/641 Fig 2.4
// =============================================================================

/*
 * @output: CXCA.D#DE34 &quot;Route: return to routine screening&quot;
 * @bindingness: legal
 * HPV result is negative — no further investigation indicated.
 */
define &quot;Route — HPV negative, return to routine&quot;:
  not &quot;HPVResultPositive&quot;

/*
 * @output: CXCA.D#DE35 &quot;Route: repeat HPV test in 12 months&quot;
 * @bindingness: legal
 * HPV result is positive but the cytology re-read shows no significant
 * cellular abnormality (NILM / less than ASC-US). Per Fig 2.4, do not refer
 * to colposcopy yet — recheck HPV in 12 months. If still positive at recheck,
 * the next evaluation will route to colposcopy.
 */
define &quot;Route — HPV+, cytology negative, repeat HPV in 12 months&quot;:
  &quot;HPVResultPositive&quot;
    and not &quot;CytologyResultASCUSorWorse&quot;

/*
 * @output: CXCA.D#DE36 &quot;Route: refer to colposcopy&quot;
 * @bindingness: legal
 * HPV result is positive and cytology re-read shows ≥ ASC-US (any of
 * ASC-US, ASC-H, LSIL, HSIL per Bethesda 2014). Refer to colposcopy
 * directly per A/641 Fig 2.4 (Op.Inst. 5.6 covers the colposcopy procedure).
 */
define &quot;Route — HPV+, cytology ≥ ASC-US, refer to colposcopy&quot;:
  &quot;HPVResultPositive&quot;
    and &quot;CytologyResultASCUSorWorse&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 (14956 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/CXCAD2DTHPVResultRoutingLogic"/>
  <version value="0.0.1"/>
  <name value="CXCAD2DTHPVResultRoutingLogic"/>
  <title value="CXCAD2DTHPVResultRoutingLogic"/>
  <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="CQL logic library for routing decisions after an HPV high-risk DNA test result returns. Implements the three-outcome decision tree from A/641 (2020) Fig 2.4: HPV negative → routine; HPV+ with negative cytology → repeat HPV in 12 months; HPV+ with cytology ≥ ASC-US → refer to colposcopy. Source CQL is at input/cql/CXCAD2DTHPVResultRoutingLogic.cql."/>
  <parameter>
    <name value="HPVResultPositive"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="CytologyResultASCUSorWorse"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Patient"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Patient"/>
  </parameter>
  <parameter>
    <name value="Route — HPV negative, return to routine"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Route — HPV+, cytology negative, repeat HPV in 12 months"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Route — HPV+, cytology ≥ ASC-US, refer to colposcopy"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <content>
    <contentType value="text/cql"/>
    <data
          value="LyoKICogTGlicmFyeTogQ1hDQUQyRFRIUFZSZXN1bHRSb3V0aW5nTG9naWMKICoKICogRGVjaXNpb246IFdoYXQgdG8gZG8gd2l0aCBhIHJldHVybmVkIEhQViBoaWdoLXJpc2sgRE5BIHRlc3QgcmVzdWx0CiAqIEwyIFNvdXJjZTogQS82NDEgKDIwMjApIEZpZyAyLjQg4oCUIEhQViBwYXRod2F5IHJlc3VsdCByb3V0aW5nIHRyZWUKICogVHJpZ2dlcjogSFBWIHJlc3VsdCBhdmFpbGFibGUgZm9yIGFuIEhQVi1zY3JlZW5lZCBwYXRpZW50CiAqCiAqIFRIRSBST1VUSU5HIFRSRUU6CiAqCiAqICAgSFBWIHJlc3VsdCByZXR1cm5zCiAqICAgICAg4oaTCiAqICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQCiAqICAg4pSCIEhQViBuZWdhdGl2ZSAgICAgICAgICAgICAgICAgICAgIOKUgiDihpIgcmV0dXJuIHRvIHJvdXRpbmUgc2NyZWVuaW5nCiAqICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkCiAqICAg4pSCIEhQViBwb3NpdGl2ZSAgICAgICAgICAgICAgICAgICAgIOKUgiDihpIgcmUtcmVhZCB0aGUgc2F2ZWQgY3l0b2xvZ3kgc2xpZGUKICogICDilIIgICDihpMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIKICogICDilIIgICBDeXRvbG9neSA8IEFTQy1VUyAoTklMTSkgICAgICAg4pSCIOKGkiByZXBlYXQgSFBWIGluIDEyIG1vbnRocwogKiAgIOKUgiAgIOKGkyAodGhlbiBpZiBIUFYrIGFnYWluKSAgICAgICAgIOKUggogKiAgIOKUgiAgIOKGkiByZWZlciB0byBjb2xwb3Njb3B5ICAgICAgICAgIOKUggogKiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIKICogICDilIIgICBDeXRvbG9neSDiiaUgQVNDLVVTICAgICAgICAgICAgICDilIIg4oaSIHJlZmVyIHRvIGNvbHBvc2NvcHkgZGlyZWN0bHkKICogICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgKICoKICogVGhpcyBsaWJyYXJ5IGVuY29kZXMgdGhlIElNTUVESUFURSB0aHJlZS1vdXRjb21lIGRlY2lzaW9uIChIUFYgbmVnYXRpdmUgLwogKiBIUFYrIHdpdGggbmVnYXRpdmUgY3l0b2xvZ3kgLyBIUFYrIHdpdGggYWJub3JtYWwgY3l0b2xvZ3kpLiBUaGUgMTItbW9udGgKICogcmVwZWF0LUhQViBjeWNsZSBpcyBlbmNvZGVkIGFzIHRoZSByb3V0aW5nIG91dGNvbWU7IHRyYWNraW5nIGFuZCB0aW1lci0KICogYmFzZWQgcmVjYWxsIGhhcHBlbnMgdmlhIHRoZSByZWNhbGwvc2NoZWR1bGluZyBsYXllciAoY2h1bmsgNyDigJQgZGVmZXJyZWQpLgogKgogKiBFYWNoIHJvdXRpbmcgb3V0Y29tZSBtYXBzIHRvIGEgQ1hDQS5EIGNvZGUgKERFMzQvREUzNS9ERTM2KS4KICovCgpsaWJyYXJ5IENYQ0FEMkRUSFBWUmVzdWx0Um91dGluZ0xvZ2ljIHZlcnNpb24gJzAuMC4xJwoKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnCgovLyBQbGFjZWhvbGRlcnMg4oCUIHRvIGJlIHJlcGxhY2VkIHdpdGggRkhJUiBxdWVyaWVzIHZpYSB0aGUgc2hhcmVkIENYQ0FFbGVtZW50cwovLyBsYXllci4gUmVhbCBpbXBsZW1lbnRhdGlvbjoKLy8gICBIUFZSZXN1bHRQb3NpdGl2ZTogT2JzZXJ2YXRpb24gd2l0aCBjb2RlID0gQ1hDQS5EI0RFMyBhbmQgdmFsdWUgPSBDWENBLkQjREU4Ci8vICAgQ3l0b2xvZ3lSZXN1bHRBU0NVU29yV29yc2U6IE9ic2VydmF0aW9uIHdpdGggY29kZSA9IENYQ0EuRCNERTEzIGFuZCB2YWx1ZQovLyAgICAgaW4ge0RFMzAgQVNDLVVTLCBERTMxIEFTQy1ILCBERTMyIExTSUwsIERFMzMgSFNJTH0gKEJldGhlc2RhIOKJpSBBU0MtVVMpCnBhcmFtZXRlciAiSFBWUmVzdWx0UG9zaXRpdmUiIEJvb2xlYW4gZGVmYXVsdCBmYWxzZQpwYXJhbWV0ZXIgIkN5dG9sb2d5UmVzdWx0QVNDVVNvcldvcnNlIiBCb29sZWFuIGRlZmF1bHQgZmFsc2UKCmNvbnRleHQgUGF0aWVudAoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gUm91dGluZyBydWxlcyDigJQgdGhyZWUgbXV0dWFsbHktZXhjbHVzaXZlIG91dGNvbWVzIHBlciBBLzY0MSBGaWcgMi40Ci8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovKgogKiBAb3V0cHV0OiBDWENBLkQjREUzNCAiUm91dGU6IHJldHVybiB0byByb3V0aW5lIHNjcmVlbmluZyIKICogQGJpbmRpbmduZXNzOiBsZWdhbAogKiBIUFYgcmVzdWx0IGlzIG5lZ2F0aXZlIOKAlCBubyBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW5kaWNhdGVkLgogKi8KZGVmaW5lICJSb3V0ZSDigJQgSFBWIG5lZ2F0aXZlLCByZXR1cm4gdG8gcm91dGluZSI6CiAgbm90ICJIUFZSZXN1bHRQb3NpdGl2ZSIKCi8qCiAqIEBvdXRwdXQ6IENYQ0EuRCNERTM1ICJSb3V0ZTogcmVwZWF0IEhQViB0ZXN0IGluIDEyIG1vbnRocyIKICogQGJpbmRpbmduZXNzOiBsZWdhbAogKiBIUFYgcmVzdWx0IGlzIHBvc2l0aXZlIGJ1dCB0aGUgY3l0b2xvZ3kgcmUtcmVhZCBzaG93cyBubyBzaWduaWZpY2FudAogKiBjZWxsdWxhciBhYm5vcm1hbGl0eSAoTklMTSAvIGxlc3MgdGhhbiBBU0MtVVMpLiBQZXIgRmlnIDIuNCwgZG8gbm90IHJlZmVyCiAqIHRvIGNvbHBvc2NvcHkgeWV0IOKAlCByZWNoZWNrIEhQViBpbiAxMiBtb250aHMuIElmIHN0aWxsIHBvc2l0aXZlIGF0IHJlY2hlY2ssCiAqIHRoZSBuZXh0IGV2YWx1YXRpb24gd2lsbCByb3V0ZSB0byBjb2xwb3Njb3B5LgogKi8KZGVmaW5lICJSb3V0ZSDigJQgSFBWKywgY3l0b2xvZ3kgbmVnYXRpdmUsIHJlcGVhdCBIUFYgaW4gMTIgbW9udGhzIjoKICAiSFBWUmVzdWx0UG9zaXRpdmUiCiAgICBhbmQgbm90ICJDeXRvbG9neVJlc3VsdEFTQ1VTb3JXb3JzZSIKCi8qCiAqIEBvdXRwdXQ6IENYQ0EuRCNERTM2ICJSb3V0ZTogcmVmZXIgdG8gY29scG9zY29weSIKICogQGJpbmRpbmduZXNzOiBsZWdhbAogKiBIUFYgcmVzdWx0IGlzIHBvc2l0aXZlIGFuZCBjeXRvbG9neSByZS1yZWFkIHNob3dzIOKJpSBBU0MtVVMgKGFueSBvZgogKiBBU0MtVVMsIEFTQy1ILCBMU0lMLCBIU0lMIHBlciBCZXRoZXNkYSAyMDE0KS4gUmVmZXIgdG8gY29scG9zY29weQogKiBkaXJlY3RseSBwZXIgQS82NDEgRmlnIDIuNCAoT3AuSW5zdC4gNS42IGNvdmVycyB0aGUgY29scG9zY29weSBwcm9jZWR1cmUpLgogKi8KZGVmaW5lICJSb3V0ZSDigJQgSFBWKywgY3l0b2xvZ3kg4omlIEFTQy1VUywgcmVmZXIgdG8gY29scG9zY29weSI6CiAgIkhQVlJlc3VsdFBvc2l0aXZlIgogICAgYW5kICJDeXRvbG9neVJlc3VsdEFTQ1VTb3JXb3JzZSIK"/>
  </content>
  <content>
    <contentType value="application/elm+xml"/>
    <data
          value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSIgbG9jYWxJZD0iMCI+CiAgIDxhbm5vdGF0aW9uIHRyYW5zbGF0b3JPcHRpb25zPSJFbmFibGVBbm5vdGF0aW9ucyxFbmFibGVMb2NhdG9ycyxEaXNhYmxlTGlzdERlbW90aW9uLERpc2FibGVMaXN0UHJvbW90aW9uIiBzaWduYXR1cmVMZXZlbD0iT3ZlcmxvYWRzIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUluZm8iLz4KICAgPGFubm90YXRpb24gbWVzc2FnZT0iQW4gb3BlcmFuZCBpZGVudGlmaWVyIHJlZmVyZW5jZSBpcyBoaWRpbmcgYW5vdGhlciBpZGVudGlmaWVyIG9mIHRoZSBzYW1lIG5hbWUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIG1lc3NhZ2U9IkFuIG9wZXJhbmQgaWRlbnRpZmllciByZWZlcmVuY2UgaXMgaGlkaW5nIGFub3RoZXIgaWRlbnRpZmllciBvZiB0aGUgc2FtZSBuYW1lLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBtZXNzYWdlPSJBbiBvcGVyYW5kIGlkZW50aWZpZXIgcmVmZXJlbmNlIGlzIGhpZGluZyBhbm90aGVyIGlkZW50aWZpZXIgb2YgdGhlIHNhbWUgbmFtZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgIDxhOnMgcj0iMjM2Ij4KICAgICAgICAgPGE6cz4vKgogKiBMaWJyYXJ5OiBDWENBRDJEVEhQVlJlc3VsdFJvdXRpbmdMb2dpYwogKgogKiBEZWNpc2lvbjogV2hhdCB0byBkbyB3aXRoIGEgcmV0dXJuZWQgSFBWIGhpZ2gtcmlzayBETkEgdGVzdCByZXN1bHQKICogTDIgU291cmNlOiBBLzY0MSAoMjAyMCkgRmlnIDIuNCDigJQgSFBWIHBhdGh3YXkgcmVzdWx0IHJvdXRpbmcgdHJlZQogKiBUcmlnZ2VyOiBIUFYgcmVzdWx0IGF2YWlsYWJsZSBmb3IgYW4gSFBWLXNjcmVlbmVkIHBhdGllbnQKICoKICogVEhFIFJPVVRJTkcgVFJFRToKICoKICogICBIUFYgcmVzdWx0IHJldHVybnMKICogICAgICDihpMKICogICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAKICogICDilIIgSFBWIG5lZ2F0aXZlICAgICAgICAgICAgICAgICAgICAg4pSCIOKGkiByZXR1cm4gdG8gcm91dGluZSBzY3JlZW5pbmcKICogICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKQKICogICDilIIgSFBWIHBvc2l0aXZlICAgICAgICAgICAgICAgICAgICAg4pSCIOKGkiByZS1yZWFkIHRoZSBzYXZlZCBjeXRvbG9neSBzbGlkZQogKiAgIOKUgiAgIOKGkyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUggogKiAgIOKUgiAgIEN5dG9sb2d5ICZsdDsgQVNDLVVTIChOSUxNKSAgICAgICDilIIg4oaSIHJlcGVhdCBIUFYgaW4gMTIgbW9udGhzCiAqICAg4pSCICAg4oaTICh0aGVuIGlmIEhQVisgYWdhaW4pICAgICAgICAg4pSCCiAqICAg4pSCICAg4oaSIHJlZmVyIHRvIGNvbHBvc2NvcHkgICAgICAgICAg4pSCCiAqICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUggogKiAgIOKUgiAgIEN5dG9sb2d5IOKJpSBBU0MtVVMgICAgICAgICAgICAgIOKUgiDihpIgcmVmZXIgdG8gY29scG9zY29weSBkaXJlY3RseQogKiAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmAogKgogKiBUaGlzIGxpYnJhcnkgZW5jb2RlcyB0aGUgSU1NRURJQVRFIHRocmVlLW91dGNvbWUgZGVjaXNpb24gKEhQViBuZWdhdGl2ZSAvCiAqIEhQVisgd2l0aCBuZWdhdGl2ZSBjeXRvbG9neSAvIEhQVisgd2l0aCBhYm5vcm1hbCBjeXRvbG9neSkuIFRoZSAxMi1tb250aAogKiByZXBlYXQtSFBWIGN5Y2xlIGlzIGVuY29kZWQgYXMgdGhlIHJvdXRpbmcgb3V0Y29tZTsgdHJhY2tpbmcgYW5kIHRpbWVyLQogKiBiYXNlZCByZWNhbGwgaGFwcGVucyB2aWEgdGhlIHJlY2FsbC9zY2hlZHVsaW5nIGxheWVyIChjaHVuayA3IOKAlCBkZWZlcnJlZCkuCiAqCiAqIEVhY2ggcm91dGluZyBvdXRjb21lIG1hcHMgdG8gYSBDWENBLkQgY29kZSAoREUzNC9ERTM1L0RFMzYpLgogKi8KCmxpYnJhcnkgQ1hDQUQyRFRIUFZSZXN1bHRSb3V0aW5nTG9naWMgdmVyc2lvbiAnMC4wLjEnPC9hOnM+CiAgICAgIDwvYTpzPgogICA8L2Fubm90YXRpb24+CiAgIDxpZGVudGlmaWVyIGlkPSJDWENBRDJEVEhQVlJlc3VsdFJvdXRpbmdMb2dpYyIgc3lzdGVtPSJodHRwOi8vc21hcnQud2hvLmludC9jeGNhIiB2ZXJzaW9uPSIwLjAuMSIvPgogICA8c2NoZW1hSWRlbnRpZmllciBpZD0idXJuOmhsNy1vcmc6ZWxtIiB2ZXJzaW9uPSJyMSIvPgogICA8dXNpbmdzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjEiIGxvY2FsSWRlbnRpZmllcj0iU3lzdGVtIiB1cmk9InVybjpobDctb3JnOmVsbS10eXBlczpyMSIgdmVyc2lvbj0iMS4wLjAiLz4KICAgICAgPGRlZiBsb2NhbElkPSIyMDYiIGxvY2F0b3I9IjM0OjEtMzQ6MjYiIGxvY2FsSWRlbnRpZmllcj0iRkhJUiIgdXJpPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB2ZXJzaW9uPSI0LjAuMSI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjIwNiI+CiAgICAgICAgICAgICAgIDxhOnM+dXNpbmcgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUjwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cz4gdmVyc2lvbiAnNC4wLjEnPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgIDwvZGVmPgogICA8L3VzaW5ncz4KICAgPGluY2x1ZGVzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIwOCIgbG9jYXRvcj0iMzY6MS0zNjozNSIgbG9jYWxJZGVudGlmaWVyPSJGSElSSGVscGVycyIgcGF0aD0iaHR0cDovL2hsNy5vcmcvZmhpci9GSElSSGVscGVycyIgdmVyc2lvbj0iNC4wLjEiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyMDgiPgogICAgICAgICAgICAgICA8YTpzPmluY2x1ZGUgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUkhlbHBlcnM8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+IHZlcnNpb24gJzQuMC4xJzwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICA8L2RlZj4KICAgPC9pbmNsdWRlcz4KICAgPHBhcmFtZXRlcnM+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjEwIiBsb2NhdG9yPSI0MzoxLTQzOjUxIiBuYW1lPSJIUFZSZXN1bHRQb3NpdGl2ZSIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjIxMCI+CiAgICAgICAgICAgICAgIDxhOnM+Ly8gUGxhY2Vob2xkZXJzIOKAlCB0byBiZSByZXBsYWNlZCB3aXRoIEZISVIgcXVlcmllcyB2aWEgdGhlIHNoYXJlZCBDWENBRWxlbWVudHMKLy8gbGF5ZXIuIFJlYWwgaW1wbGVtZW50YXRpb246Ci8vICAgSFBWUmVzdWx0UG9zaXRpdmU6IE9ic2VydmF0aW9uIHdpdGggY29kZSA9IENYQ0EuRCNERTMgYW5kIHZhbHVlID0gQ1hDQS5EI0RFOAovLyAgIEN5dG9sb2d5UmVzdWx0QVNDVVNvcldvcnNlOiBPYnNlcnZhdGlvbiB3aXRoIGNvZGUgPSBDWENBLkQjREUxMyBhbmQgdmFsdWUKLy8gICAgIGluIHtERTMwIEFTQy1VUywgREUzMSBBU0MtSCwgREUzMiBMU0lMLCBERTMzIEhTSUx9IChCZXRoZXNkYSDiiaUgQVNDLVVTKQpwYXJhbWV0ZXIgJnF1b3Q7SFBWUmVzdWx0UG9zaXRpdmUmcXVvdDsgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjEyIj4KICAgICAgICAgICAgICAgICAgPGE6cz5Cb29sZWFuPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjIxMSI+IGRlZmF1bHQgZmFsc2U8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGRlZmF1bHQgbG9jYWxJZD0iMjExIiBsb2NhdG9yPSI0Mzo0Ny00Mzo1MSIgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJmYWxzZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPHBhcmFtZXRlclR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMjEyIiBsb2NhdG9yPSI0MzozMS00MzozNyIgbmFtZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIxNCIgbG9jYXRvcj0iNDQ6MS00NDo2MCIgbmFtZT0iQ3l0b2xvZ3lSZXN1bHRBU0NVU29yV29yc2UiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyMTQiPgogICAgICAgICAgICAgICA8YTpzPnBhcmFtZXRlciAmcXVvdDtDeXRvbG9neVJlc3VsdEFTQ1VTb3JXb3JzZSZxdW90OyA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyMTYiPgogICAgICAgICAgICAgICAgICA8YTpzPkJvb2xlYW48L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjE1Ij4gZGVmYXVsdCBmYWxzZTwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZGVmYXVsdCBsb2NhbElkPSIyMTUiIGxvY2F0b3I9IjQ0OjU2LTQ0OjYwIiB2YWx1ZVR5cGU9InQ6Qm9vbGVhbiIgdmFsdWU9ImZhbHNlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICA8cGFyYW1ldGVyVHlwZVNwZWNpZmllciBsb2NhbElkPSIyMTYiIGxvY2F0b3I9IjQ0OjQwLTQ0OjQ2IiBuYW1lPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgPC9kZWY+CiAgIDwvcGFyYW1ldGVycz4KICAgPGNvbnRleHRzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIyMSIgbG9jYXRvcj0iNDY6MS00NjoxNSIgbmFtZT0iUGF0aWVudCIvPgogICA8L2NvbnRleHRzPgogICA8c3RhdGVtZW50cz4KICAgICAgPGRlZiBsb2NhbElkPSIyMTkiIGxvY2F0b3I9IjQ2OjEtNDY6MTUiIG5hbWU9IlBhdGllbnQiIGNvbnRleHQ9IlBhdGllbnQiPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMjAiIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjE4IiBsb2NhdG9yPSI0NjoxLTQ2OjE1IiBkYXRhVHlwZT0iZmhpcjpQYXRpZW50IiB0ZW1wbGF0ZUlkPSJodHRwOi8vaGw3Lm9yZy9maGlyL1N0cnVjdHVyZURlZmluaXRpb24vUGF0aWVudCIgeHNpOnR5cGU9IlJldHJpZXZlIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjI0IiBsb2NhdG9yPSI1NzoxLTU4OjI1IiBuYW1lPSJSb3V0ZSDigJQgSFBWIG5lZ2F0aXZlLCByZXR1cm4gdG8gcm91dGluZSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTp0IG5hbWU9Im91dHB1dCIgdmFsdWU9IiZxdW90O1JvdXRlOiByZXR1cm4gdG8gcm91dGluZSBzY3JlZW5pbmcmcXVvdDsiLz4KICAgICAgICAgICAgPGE6dCBuYW1lPSJiaW5kaW5nbmVzcyIgdmFsdWU9ImxlZ2FsJiN4YTtIUFYgcmVzdWx0IGlzIG5lZ2F0aXZlIOKAlCBubyBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW5kaWNhdGVkLiIvPgogICAgICAgICAgICA8YTpzIHI9IjIyNCI+CiAgICAgICAgICAgICAgIDxhOnM+Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gUm91dGluZyBydWxlcyDigJQgdGhyZWUgbXV0dWFsbHktZXhjbHVzaXZlIG91dGNvbWVzIHBlciBBLzY0MSBGaWcgMi40Ci8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovKgogKiBAb3V0cHV0OiBDWENBLkQjREUzNCAmcXVvdDtSb3V0ZTogcmV0dXJuIHRvIHJvdXRpbmUgc2NyZWVuaW5nJnF1b3Q7CiAqIEBiaW5kaW5nbmVzczogbGVnYWwKICogSFBWIHJlc3VsdCBpcyBuZWdhdGl2ZSDigJQgbm8gZnVydGhlciBpbnZlc3RpZ2F0aW9uIGluZGljYXRlZC4KICovCmRlZmluZSAmcXVvdDtSb3V0ZSDigJQgSFBWIG5lZ2F0aXZlLCByZXR1cm4gdG8gcm91dGluZSZxdW90OzoKICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyMjUiPgogICAgICAgICAgICAgICAgICA8YTpzPm5vdCA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjYiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0hQVlJlc3VsdFBvc2l0aXZlJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjI1IiBsb2NhdG9yPSI1ODozLTU4OjI1IiB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjI2IiBsb2NhdG9yPSI1ODo3LTU4OjI1IiBuYW1lPSJIUFZSZXN1bHRQb3NpdGl2ZSIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIyOSIgbG9jYXRvcj0iNjg6MS03MDo0MCIgbmFtZT0iUm91dGUg4oCUIEhQVissIGN5dG9sb2d5IG5lZ2F0aXZlLCByZXBlYXQgSFBWIGluIDEyIG1vbnRocyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTp0IG5hbWU9Im91dHB1dCIgdmFsdWU9IiZxdW90O1JvdXRlOiByZXBlYXQgSFBWIHRlc3QgaW4gMTIgbW9udGhzJnF1b3Q7Ii8+CiAgICAgICAgICAgIDxhOnQgbmFtZT0iYmluZGluZ25lc3MiIHZhbHVlPSJsZWdhbCYjeGE7SFBWIHJlc3VsdCBpcyBwb3NpdGl2ZSBidXQgdGhlIGN5dG9sb2d5IHJlLXJlYWQgc2hvd3Mgbm8gc2lnbmlmaWNhbnQmI3hhO2NlbGx1bGFyIGFibm9ybWFsaXR5IChOSUxNIC8gbGVzcyB0aGFuIEFTQy1VUykuIFBlciBGaWcgMi40LCBkbyBub3QgcmVmZXImI3hhO3RvIGNvbHBvc2NvcHkgeWV0IOKAlCByZWNoZWNrIEhQViBpbiAxMiBtb250aHMuIElmIHN0aWxsIHBvc2l0aXZlIGF0IHJlY2hlY2ssJiN4YTt0aGUgbmV4dCBldmFsdWF0aW9uIHdpbGwgcm91dGUgdG8gY29scG9zY29weS4iLz4KICAgICAgICAgICAgPGE6cyByPSIyMjkiPgogICAgICAgICAgICAgICA8YTpzPi8qCiAqIEBvdXRwdXQ6IENYQ0EuRCNERTM1ICZxdW90O1JvdXRlOiByZXBlYXQgSFBWIHRlc3QgaW4gMTIgbW9udGhzJnF1b3Q7CiAqIEBiaW5kaW5nbmVzczogbGVnYWwKICogSFBWIHJlc3VsdCBpcyBwb3NpdGl2ZSBidXQgdGhlIGN5dG9sb2d5IHJlLXJlYWQgc2hvd3Mgbm8gc2lnbmlmaWNhbnQKICogY2VsbHVsYXIgYWJub3JtYWxpdHkgKE5JTE0gLyBsZXNzIHRoYW4gQVNDLVVTKS4gUGVyIEZpZyAyLjQsIGRvIG5vdCByZWZlcgogKiB0byBjb2xwb3Njb3B5IHlldCDigJQgcmVjaGVjayBIUFYgaW4gMTIgbW9udGhzLiBJZiBzdGlsbCBwb3NpdGl2ZSBhdCByZWNoZWNrLAogKiB0aGUgbmV4dCBldmFsdWF0aW9uIHdpbGwgcm91dGUgdG8gY29scG9zY29weS4KICovCmRlZmluZSAmcXVvdDtSb3V0ZSDigJQgSFBWKywgY3l0b2xvZ3kgbmVnYXRpdmUsIHJlcGVhdCBIUFYgaW4gMTIgbW9udGhzJnF1b3Q7OgogIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjIzMCI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMxIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtIUFZSZXN1bHRQb3NpdGl2ZSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4KICAgIGFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzIiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPm5vdCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzMiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0N5dG9sb2d5UmVzdWx0QVNDVVNvcldvcnNlJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIzMCIgbG9jYXRvcj0iNjk6My03MDo0MCIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzMSIgbG9jYXRvcj0iNjk6My02OToyMSIgbmFtZT0iSFBWUmVzdWx0UG9zaXRpdmUiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjMyIiBsb2NhdG9yPSI3MDo5LTcwOjQwIiB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjMzIiBsb2NhdG9yPSI3MDoxMy03MDo0MCIgbmFtZT0iQ3l0b2xvZ3lSZXN1bHRBU0NVU29yV29yc2UiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIzNiIgbG9jYXRvcj0iNzk6MS04MTozNiIgbmFtZT0iUm91dGUg4oCUIEhQVissIGN5dG9sb2d5IOKJpSBBU0MtVVMsIHJlZmVyIHRvIGNvbHBvc2NvcHkiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6dCBuYW1lPSJvdXRwdXQiIHZhbHVlPSImcXVvdDtSb3V0ZTogcmVmZXIgdG8gY29scG9zY29weSZxdW90OyIvPgogICAgICAgICAgICA8YTp0IG5hbWU9ImJpbmRpbmduZXNzIiB2YWx1ZT0ibGVnYWwmI3hhO0hQViByZXN1bHQgaXMgcG9zaXRpdmUgYW5kIGN5dG9sb2d5IHJlLXJlYWQgc2hvd3Mg4omlIEFTQy1VUyAoYW55IG9mJiN4YTtBU0MtVVMsIEFTQy1ILCBMU0lMLCBIU0lMIHBlciBCZXRoZXNkYSAyMDE0KS4gUmVmZXIgdG8gY29scG9zY29weSYjeGE7ZGlyZWN0bHkgcGVyIEEvNjQxIEZpZyAyLjQgKE9wLkluc3QuIDUuNiBjb3ZlcnMgdGhlIGNvbHBvc2NvcHkgcHJvY2VkdXJlKS4iLz4KICAgICAgICAgICAgPGE6cyByPSIyMzYiPgogICAgICAgICAgICAgICA8YTpzPi8qCiAqIEBvdXRwdXQ6IENYQ0EuRCNERTM2ICZxdW90O1JvdXRlOiByZWZlciB0byBjb2xwb3Njb3B5JnF1b3Q7CiAqIEBiaW5kaW5nbmVzczogbGVnYWwKICogSFBWIHJlc3VsdCBpcyBwb3NpdGl2ZSBhbmQgY3l0b2xvZ3kgcmUtcmVhZCBzaG93cyDiiaUgQVNDLVVTIChhbnkgb2YKICogQVNDLVVTLCBBU0MtSCwgTFNJTCwgSFNJTCBwZXIgQmV0aGVzZGEgMjAxNCkuIFJlZmVyIHRvIGNvbHBvc2NvcHkKICogZGlyZWN0bHkgcGVyIEEvNjQxIEZpZyAyLjQgKE9wLkluc3QuIDUuNiBjb3ZlcnMgdGhlIGNvbHBvc2NvcHkgcHJvY2VkdXJlKS4KICovCmRlZmluZSAmcXVvdDtSb3V0ZSDigJQgSFBWKywgY3l0b2xvZ3kg4omlIEFTQy1VUywgcmVmZXIgdG8gY29scG9zY29weSZxdW90OzoKICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyMzciPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzOCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SFBWUmVzdWx0UG9zaXRpdmUmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICBhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM5Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtDeXRvbG9neVJlc3VsdEFTQ1VTb3JXb3JzZSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIzNyIgbG9jYXRvcj0iODA6My04MTozNiIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzOCIgbG9jYXRvcj0iODA6My04MDoyMSIgbmFtZT0iSFBWUmVzdWx0UG9zaXRpdmUiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjM5IiBsb2NhdG9yPSI4MTo5LTgxOjM2IiBuYW1lPSJDeXRvbG9neVJlc3VsdEFTQ1VTb3JXb3JzZSIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICA8L3N0YXRlbWVudHM+CjwvbGlicmFyeT4K"/>
  </content>
</Library>