Clinical Practice Guidelines Example Implementation Guide - Anthrax Post-Exposure Prophylaxis
1.1.0 - ci-build International flag

Clinical Practice Guidelines Example Implementation Guide - Anthrax Post-Exposure Prophylaxis - Local Development build (v1.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

: CDC Common Logic for FHIRv400 - XML Representation

Draft as of 2024-11-18

Raw xml | Download


<Library xmlns="http://hl7.org/fhir">
  <id value="cdc-common-logic-library"/>
  <text>
    <status value="generated"/>
    <div xmlns="http://www.w3.org/1999/xhtml"><p class="res-header-id"><b>Generated Narrative: Library cdc-common-logic-library</b></p><a name="cdc-common-logic-library"> </a><a name="hccdc-common-logic-library"> </a><a name="cdc-common-logic-library-en-US"> </a><h2>Participants</h2><table class="grid"><tr><td>Author</td><td>Alliance to Modernize Healthcare FFRDC</td></tr><tr><td>Endorser</td><td>Centers for Disease Control and Prevention</td></tr></table><h2>Contents</h2><p><code>text/cql</code></p><pre><code class="language-sql">/*  Library: CDC Common Logic for FHIRv400
    Author: CMS Alliance to Modernize Healthcare, operated by THE MITRE Corporation.

    (C) 2019 The MITRE Corporation. All Rights Reserved. Approved for Public Release: 19-2048. Distribution Unlimited.
*/
library CDC_Common_Logic_FHIRv400 version '1.0.0'

using FHIR version '4.0.0'

// Include the FHIRHelpers library for simplifying interacton w/ the FHIR data model
include FHIRHelpers version '4.0.0' called FHIRHelpers

/**
 * Converts a codeable concept to text.
 * @param c - a FHIR codeable concept
 * @returns {System.String} a CQL String of text
 */
define function ConceptText(c FHIR.CodeableConcept):
  Coalesce(c.text.value, Coalesce((c.coding) c2 return c2.display.value))

/**
  * Converts a FHIR Date to text.
  * @param d - a FHIR Date
  * @returns {System.String} a CQL String of text
 */
define function DateText(d FHIR.date):
  ToString(d.value)

/**
  * Converts a FHIR DateTime to text.
  * @param d - a FHIR DateTime
  * @returns {System.String} a CQL String of text
 */
define function DateTimeText(d FHIR.dateTime):
  ToString(d.value)

/**
  * Converts a CQL Code to a Tuple containing the system, code, and display fields.
  * @param d - a CQL code
  * @returns {Tuple} a Tuple
 */
define function FormatCode(c System.Code):
  {
    system: c.system,
    code: c.code,
    display: c.display
  }

/**
  * Forms a local refernce using a type and an id string
  * @param type - A String specifying the resource type of the reference
  * @param id - A String specifying the resource id of the reference
  * @returns {System.String} a string of text containing the local reference
 */
define function GenerateLocalReference(type System.String, id System.String):
  Combine({type, '/', id})

/**
  * Removes null entries from a list of strings
  * @param list - A list of strings
  * @returns {List&lt;System.String&gt;} the input list with the null entries removed
 */
define function CullNullStrings(list List&lt;System.String&gt;):
  list L where L is not null

/**
  * Finds the first non-null meaningful date that can be associated with this Condition.  This will look through the
  * following fields in the following order: onsetDateTime.value, onsetPeriod.start, assertedDate.
  * @param Cond - a Condition
  * @returns {System.DateTime} the first non-null meaningful date, or null if non is found
 */
define function FindConditionDate(Cond Condition):
  Coalesce(Cond.onset.value, Cond.onset.start.value, Cond.recordedDate.value)

/**
  * Finds the most recent Condition in list by examining the following fields in
  * the following order: onsetDateTime.value, onsetPeriod.start, assertedDate.
  * @param CondList - a list of Conditions
  * @returns {Condition} the most recent Condition in the list
 */
define function MostRecentCondition(CondList List&lt;Condition&gt;):
  Last(CondList C sort by Coalesce(onset.value, onset.start.value, recordedDate.value))

/**
  * Finds the first non-null meaningful date that can be associated with this Procedure.
  * This will look through the following fields in the following order: performedDateTime.value,
  * performedPeriod.start.
  * @param Proc - a Procedure
  * @returns {System.DateTime} the first non-null meaningful date, or null if non is found
 */
define function FindProcedureDate(Proc Procedure):
  Coalesce(Proc.performed.value, Proc.performed.start.value)

/**
  * Finds the most recent Procedure in list by examining the following fields in
  * the following order: performedDateTime.value, performedPeriod.start.
  * @param CondList - a list of Procedures
  * @returns {Procedure} the most recent Procedure in the list
 */
define function MostRecentProcedure(ProcList List&lt;Procedure&gt;):
  Last(ProcList P sort by Coalesce(performed.value, performed.start.value))

/**
  * Finds the first non-null meaningful date that can be associated with this MedicationStatement.
  * This will look through the following fields in the following order: effectiveDateTime,
  * s.effectivePeriod.&quot;start&quot;.
  * @param Proc - a MedicationStatement
  * @returns {System.String} the first non-null meaningful date, or null if non is found
 */
define function MedicationStatementDate(s FHIR.MedicationStatement):
  Coalesce(DateTimeText(s.effective), DateTimeText(s.effective.&quot;start&quot;))
</code></pre><p><code>Content not shown - (</code><code>application/elm+xml</code>, size = 37Kb )</p></div>
  </text>
  <url
       value="http://cqframework.org/cpg-example-anthrax/Library/cdc-common-logic-library"/>
  <identifier>
    <use value="official"/>
    <value value="CDC_Common_Logic_FHIRv400"/>
  </identifier>
  <version value="1.1.0"/>
  <name value="CDC_Common_Logic_FHIRv400_Library"/>
  <title value="CDC Common Logic for FHIRv400"/>
  <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="2024-11-18T16:43:41+00:00"/>
  <publisher value="HL7 International - Clinical Decision Support WG"/>
  <contact>
    <name value="HL7 International - Clinical Decision Support WG"/>
    <telecom>
      <system value="url"/>
      <value value="http://www.hl7.org/Special/committees/dss/index.cfm"/>
    </telecom>
  </contact>
  <description
               value="A library containing common logic used by CDC CDS artifacts"/>
  <jurisdiction>
    <coding>
      <system value="http://unstats.un.org/unsd/methods/m49/m49.htm"/>
      <code value="001"/>
      <display value="World"/>
    </coding>
  </jurisdiction>
  <approvalDate value="2019-06-07"/>
  <topic>
    <text value="Anthrax"/>
  </topic>
  <topic>
    <text value="Emergency Medicine"/>
  </topic>
  <topic>
    <text value="Post-Exposure Prophylaxis"/>
  </topic>
  <author>
    <name value="Alliance to Modernize Healthcare FFRDC"/>
  </author>
  <endorser>
    <name value="Centers for Disease Control and Prevention"/>
  </endorser>
  <content>
    <contentType value="text/cql"/>
    <data
          value="LyogIExpYnJhcnk6IENEQyBDb21tb24gTG9naWMgZm9yIEZISVJ2NDAwCiAgICBBdXRob3I6IENNUyBBbGxpYW5jZSB0byBNb2Rlcm5pemUgSGVhbHRoY2FyZSwgb3BlcmF0ZWQgYnkgVEhFIE1JVFJFIENvcnBvcmF0aW9uLgoKICAgIChDKSAyMDE5IFRoZSBNSVRSRSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQXBwcm92ZWQgZm9yIFB1YmxpYyBSZWxlYXNlOiAxOS0yMDQ4LiBEaXN0cmlidXRpb24gVW5saW1pdGVkLgoqLwpsaWJyYXJ5IENEQ19Db21tb25fTG9naWNfRkhJUnY0MDAgdmVyc2lvbiAnMS4wLjAnCgp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4wJwoKLy8gSW5jbHVkZSB0aGUgRkhJUkhlbHBlcnMgbGlicmFyeSBmb3Igc2ltcGxpZnlpbmcgaW50ZXJhY3RvbiB3LyB0aGUgRkhJUiBkYXRhIG1vZGVsCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjAnIGNhbGxlZCBGSElSSGVscGVycwoKLyoqCiAqIENvbnZlcnRzIGEgY29kZWFibGUgY29uY2VwdCB0byB0ZXh0LgogKiBAcGFyYW0gYyAtIGEgRkhJUiBjb2RlYWJsZSBjb25jZXB0CiAqIEByZXR1cm5zIHtTeXN0ZW0uU3RyaW5nfSBhIENRTCBTdHJpbmcgb2YgdGV4dAogKi8KZGVmaW5lIGZ1bmN0aW9uIENvbmNlcHRUZXh0KGMgRkhJUi5Db2RlYWJsZUNvbmNlcHQpOgogIENvYWxlc2NlKGMudGV4dC52YWx1ZSwgQ29hbGVzY2UoKGMuY29kaW5nKSBjMiByZXR1cm4gYzIuZGlzcGxheS52YWx1ZSkpCgovKioKICAqIENvbnZlcnRzIGEgRkhJUiBEYXRlIHRvIHRleHQuCiAgKiBAcGFyYW0gZCAtIGEgRkhJUiBEYXRlCiAgKiBAcmV0dXJucyB7U3lzdGVtLlN0cmluZ30gYSBDUUwgU3RyaW5nIG9mIHRleHQKICovCmRlZmluZSBmdW5jdGlvbiBEYXRlVGV4dChkIEZISVIuZGF0ZSk6CiAgVG9TdHJpbmcoZC52YWx1ZSkKCi8qKgogICogQ29udmVydHMgYSBGSElSIERhdGVUaW1lIHRvIHRleHQuCiAgKiBAcGFyYW0gZCAtIGEgRkhJUiBEYXRlVGltZQogICogQHJldHVybnMge1N5c3RlbS5TdHJpbmd9IGEgQ1FMIFN0cmluZyBvZiB0ZXh0CiAqLwpkZWZpbmUgZnVuY3Rpb24gRGF0ZVRpbWVUZXh0KGQgRkhJUi5kYXRlVGltZSk6CiAgVG9TdHJpbmcoZC52YWx1ZSkKCi8qKgogICogQ29udmVydHMgYSBDUUwgQ29kZSB0byBhIFR1cGxlIGNvbnRhaW5pbmcgdGhlIHN5c3RlbSwgY29kZSwgYW5kIGRpc3BsYXkgZmllbGRzLgogICogQHBhcmFtIGQgLSBhIENRTCBjb2RlCiAgKiBAcmV0dXJucyB7VHVwbGV9IGEgVHVwbGUKICovCmRlZmluZSBmdW5jdGlvbiBGb3JtYXRDb2RlKGMgU3lzdGVtLkNvZGUpOgogIHsKICAgIHN5c3RlbTogYy5zeXN0ZW0sCiAgICBjb2RlOiBjLmNvZGUsCiAgICBkaXNwbGF5OiBjLmRpc3BsYXkKICB9CgovKioKICAqIEZvcm1zIGEgbG9jYWwgcmVmZXJuY2UgdXNpbmcgYSB0eXBlIGFuZCBhbiBpZCBzdHJpbmcKICAqIEBwYXJhbSB0eXBlIC0gQSBTdHJpbmcgc3BlY2lmeWluZyB0aGUgcmVzb3VyY2UgdHlwZSBvZiB0aGUgcmVmZXJlbmNlCiAgKiBAcGFyYW0gaWQgLSBBIFN0cmluZyBzcGVjaWZ5aW5nIHRoZSByZXNvdXJjZSBpZCBvZiB0aGUgcmVmZXJlbmNlCiAgKiBAcmV0dXJucyB7U3lzdGVtLlN0cmluZ30gYSBzdHJpbmcgb2YgdGV4dCBjb250YWluaW5nIHRoZSBsb2NhbCByZWZlcmVuY2UKICovCmRlZmluZSBmdW5jdGlvbiBHZW5lcmF0ZUxvY2FsUmVmZXJlbmNlKHR5cGUgU3lzdGVtLlN0cmluZywgaWQgU3lzdGVtLlN0cmluZyk6CiAgQ29tYmluZSh7dHlwZSwgJy8nLCBpZH0pCgovKioKICAqIFJlbW92ZXMgbnVsbCBlbnRyaWVzIGZyb20gYSBsaXN0IG9mIHN0cmluZ3MKICAqIEBwYXJhbSBsaXN0IC0gQSBsaXN0IG9mIHN0cmluZ3MKICAqIEByZXR1cm5zIHtMaXN0PFN5c3RlbS5TdHJpbmc+fSB0aGUgaW5wdXQgbGlzdCB3aXRoIHRoZSBudWxsIGVudHJpZXMgcmVtb3ZlZAogKi8KZGVmaW5lIGZ1bmN0aW9uIEN1bGxOdWxsU3RyaW5ncyhsaXN0IExpc3Q8U3lzdGVtLlN0cmluZz4pOgogIGxpc3QgTCB3aGVyZSBMIGlzIG5vdCBudWxsCgovKioKICAqIEZpbmRzIHRoZSBmaXJzdCBub24tbnVsbCBtZWFuaW5nZnVsIGRhdGUgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQ29uZGl0aW9uLiAgVGhpcyB3aWxsIGxvb2sgdGhyb3VnaCB0aGUKICAqIGZvbGxvd2luZyBmaWVsZHMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogb25zZXREYXRlVGltZS52YWx1ZSwgb25zZXRQZXJpb2Quc3RhcnQsIGFzc2VydGVkRGF0ZS4KICAqIEBwYXJhbSBDb25kIC0gYSBDb25kaXRpb24KICAqIEByZXR1cm5zIHtTeXN0ZW0uRGF0ZVRpbWV9IHRoZSBmaXJzdCBub24tbnVsbCBtZWFuaW5nZnVsIGRhdGUsIG9yIG51bGwgaWYgbm9uIGlzIGZvdW5kCiAqLwpkZWZpbmUgZnVuY3Rpb24gRmluZENvbmRpdGlvbkRhdGUoQ29uZCBDb25kaXRpb24pOgogIENvYWxlc2NlKENvbmQub25zZXQudmFsdWUsIENvbmQub25zZXQuc3RhcnQudmFsdWUsIENvbmQucmVjb3JkZWREYXRlLnZhbHVlKQoKLyoqCiAgKiBGaW5kcyB0aGUgbW9zdCByZWNlbnQgQ29uZGl0aW9uIGluIGxpc3QgYnkgZXhhbWluaW5nIHRoZSBmb2xsb3dpbmcgZmllbGRzIGluCiAgKiB0aGUgZm9sbG93aW5nIG9yZGVyOiBvbnNldERhdGVUaW1lLnZhbHVlLCBvbnNldFBlcmlvZC5zdGFydCwgYXNzZXJ0ZWREYXRlLgogICogQHBhcmFtIENvbmRMaXN0IC0gYSBsaXN0IG9mIENvbmRpdGlvbnMKICAqIEByZXR1cm5zIHtDb25kaXRpb259IHRoZSBtb3N0IHJlY2VudCBDb25kaXRpb24gaW4gdGhlIGxpc3QKICovCmRlZmluZSBmdW5jdGlvbiBNb3N0UmVjZW50Q29uZGl0aW9uKENvbmRMaXN0IExpc3Q8Q29uZGl0aW9uPik6CiAgTGFzdChDb25kTGlzdCBDIHNvcnQgYnkgQ29hbGVzY2Uob25zZXQudmFsdWUsIG9uc2V0LnN0YXJ0LnZhbHVlLCByZWNvcmRlZERhdGUudmFsdWUpKQoKLyoqCiAgKiBGaW5kcyB0aGUgZmlyc3Qgbm9uLW51bGwgbWVhbmluZ2Z1bCBkYXRlIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFByb2NlZHVyZS4KICAqIFRoaXMgd2lsbCBsb29rIHRocm91Z2ggdGhlIGZvbGxvd2luZyBmaWVsZHMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogcGVyZm9ybWVkRGF0ZVRpbWUudmFsdWUsCiAgKiBwZXJmb3JtZWRQZXJpb2Quc3RhcnQuCiAgKiBAcGFyYW0gUHJvYyAtIGEgUHJvY2VkdXJlCiAgKiBAcmV0dXJucyB7U3lzdGVtLkRhdGVUaW1lfSB0aGUgZmlyc3Qgbm9uLW51bGwgbWVhbmluZ2Z1bCBkYXRlLCBvciBudWxsIGlmIG5vbiBpcyBmb3VuZAogKi8KZGVmaW5lIGZ1bmN0aW9uIEZpbmRQcm9jZWR1cmVEYXRlKFByb2MgUHJvY2VkdXJlKToKICBDb2FsZXNjZShQcm9jLnBlcmZvcm1lZC52YWx1ZSwgUHJvYy5wZXJmb3JtZWQuc3RhcnQudmFsdWUpCgovKioKICAqIEZpbmRzIHRoZSBtb3N0IHJlY2VudCBQcm9jZWR1cmUgaW4gbGlzdCBieSBleGFtaW5pbmcgdGhlIGZvbGxvd2luZyBmaWVsZHMgaW4KICAqIHRoZSBmb2xsb3dpbmcgb3JkZXI6IHBlcmZvcm1lZERhdGVUaW1lLnZhbHVlLCBwZXJmb3JtZWRQZXJpb2Quc3RhcnQuCiAgKiBAcGFyYW0gQ29uZExpc3QgLSBhIGxpc3Qgb2YgUHJvY2VkdXJlcwogICogQHJldHVybnMge1Byb2NlZHVyZX0gdGhlIG1vc3QgcmVjZW50IFByb2NlZHVyZSBpbiB0aGUgbGlzdAogKi8KZGVmaW5lIGZ1bmN0aW9uIE1vc3RSZWNlbnRQcm9jZWR1cmUoUHJvY0xpc3QgTGlzdDxQcm9jZWR1cmU+KToKICBMYXN0KFByb2NMaXN0IFAgc29ydCBieSBDb2FsZXNjZShwZXJmb3JtZWQudmFsdWUsIHBlcmZvcm1lZC5zdGFydC52YWx1ZSkpCgovKioKICAqIEZpbmRzIHRoZSBmaXJzdCBub24tbnVsbCBtZWFuaW5nZnVsIGRhdGUgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgTWVkaWNhdGlvblN0YXRlbWVudC4KICAqIFRoaXMgd2lsbCBsb29rIHRocm91Z2ggdGhlIGZvbGxvd2luZyBmaWVsZHMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogZWZmZWN0aXZlRGF0ZVRpbWUsCiAgKiBzLmVmZmVjdGl2ZVBlcmlvZC4ic3RhcnQiLgogICogQHBhcmFtIFByb2MgLSBhIE1lZGljYXRpb25TdGF0ZW1lbnQKICAqIEByZXR1cm5zIHtTeXN0ZW0uU3RyaW5nfSB0aGUgZmlyc3Qgbm9uLW51bGwgbWVhbmluZ2Z1bCBkYXRlLCBvciBudWxsIGlmIG5vbiBpcyBmb3VuZAogKi8KZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25TdGF0ZW1lbnREYXRlKHMgRkhJUi5NZWRpY2F0aW9uU3RhdGVtZW50KToKICBDb2FsZXNjZShEYXRlVGltZVRleHQocy5lZmZlY3RpdmUpLCBEYXRlVGltZVRleHQocy5lZmZlY3RpdmUuInN0YXJ0IikpCg=="/>
  </content>
  <content>
    <contentType value="application/elm+xml"/>
    <data
          value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHRyYW5zbGF0b3JPcHRpb25zPSJFbmFibGVBbm5vdGF0aW9ucyxFbmFibGVMb2NhdG9ycyxEaXNhYmxlTGlzdERlbW90aW9uLERpc2FibGVMaXN0UHJvbW90aW9uIiBzaWduYXR1cmVMZXZlbD0iTm9uZSIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1JbmZvIi8+CiAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICA8YTpzIHI9IjEyOSI+CiAgICAgICAgIDxhOnM+LyogIExpYnJhcnk6IENEQyBDb21tb24gTG9naWMgZm9yIEZISVJ2NDAwCiAgICBBdXRob3I6IENNUyBBbGxpYW5jZSB0byBNb2Rlcm5pemUgSGVhbHRoY2FyZSwgb3BlcmF0ZWQgYnkgVEhFIE1JVFJFIENvcnBvcmF0aW9uLgoKICAgIChDKSAyMDE5IFRoZSBNSVRSRSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQXBwcm92ZWQgZm9yIFB1YmxpYyBSZWxlYXNlOiAxOS0yMDQ4LiBEaXN0cmlidXRpb24gVW5saW1pdGVkLgoqLwpsaWJyYXJ5IENEQ19Db21tb25fTG9naWNfRkhJUnY0MDAgdmVyc2lvbiAnMS4wLjAnPC9hOnM+CiAgICAgIDwvYTpzPgogICA8L2Fubm90YXRpb24+CiAgIDxpZGVudGlmaWVyIGlkPSJDRENfQ29tbW9uX0xvZ2ljX0ZISVJ2NDAwIiBzeXN0ZW09Imh0dHA6Ly9jcWZyYW1ld29yay5vcmcvY3BnLWV4YW1wbGUtYW50aHJheCIgdmVyc2lvbj0iMS4wLjAiLz4KICAgPHNjaGVtYUlkZW50aWZpZXIgaWQ9InVybjpobDctb3JnOmVsbSIgdmVyc2lvbj0icjEiLz4KICAgPHVzaW5ncz4KICAgICAgPGRlZiBsb2NhbElkZW50aWZpZXI9IlN5c3RlbSIgdXJpPSJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEiLz4KICAgICAgPGRlZiBsb2NhbElkPSIxIiBsb2NhdG9yPSI4OjEtODoyNiIgbG9jYWxJZGVudGlmaWVyPSJGSElSIiB1cmk9Imh0dHA6Ly9obDcub3JnL2ZoaXIiIHZlcnNpb249IjQuMC4wIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMSI+CiAgICAgICAgICAgICAgIDxhOnM+dXNpbmcgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUjwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cz4gdmVyc2lvbiAnNC4wLjAnPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgIDwvZGVmPgogICA8L3VzaW5ncz4KICAgPGluY2x1ZGVzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIiIGxvY2F0b3I9IjExOjEtMTE6NTQiIGxvY2FsSWRlbnRpZmllcj0iRkhJUkhlbHBlcnMiIHBhdGg9Imh0dHA6Ly9obDcub3JnL2ZoaXIvRkhJUkhlbHBlcnMiIHZlcnNpb249IjQuMC4wIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMiI+CiAgICAgICAgICAgICAgIDxhOnM+Ly8gSW5jbHVkZSB0aGUgRkhJUkhlbHBlcnMgbGlicmFyeSBmb3Igc2ltcGxpZnlpbmcgaW50ZXJhY3RvbiB3LyB0aGUgRkhJUiBkYXRhIG1vZGVsCmluY2x1ZGUgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUkhlbHBlcnM8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+IHZlcnNpb24gJzQuMC4wJyBjYWxsZWQgRkhJUkhlbHBlcnM8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgPC9kZWY+CiAgIDwvaW5jbHVkZXM+CiAgIDxzdGF0ZW1lbnRzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjE3IiBsb2NhdG9yPSIxODoxLTE5OjczIiBuYW1lPSJDb25jZXB0VGV4dCIgY29udGV4dD0iVW5maWx0ZXJlZCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uRGVmIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMTciPgogICAgICAgICAgICAgICA8YTpzPi8qKgogKiBDb252ZXJ0cyBhIGNvZGVhYmxlIGNvbmNlcHQgdG8gdGV4dC4KICogQHBhcmFtIGMgLSBhIEZISVIgY29kZWFibGUgY29uY2VwdAogKiBAcmV0dXJucyB7U3lzdGVtLlN0cmluZ30gYSBDUUwgU3RyaW5nIG9mIHRleHQKICovCmRlZmluZSBmdW5jdGlvbiBDb25jZXB0VGV4dChjIEZISVIuQ29kZWFibGVDb25jZXB0KToKICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxNiI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTYiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPkNvYWxlc2NlKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjYiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnRleHQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q29hbGVzY2UoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2Rpbmc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGMyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnJldHVybiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jMjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmRpc3BsYXk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTYiIGxvY2F0b3I9IjE5OjMtMTk6NzMiIHhzaTp0eXBlPSJDb2FsZXNjZSI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjYiIGxvY2F0b3I9IjE5OjEyLTE5OjIzIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1IiBsb2NhdG9yPSIxOToxMi0xOToxNyIgcGF0aD0idGV4dCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0IiBsb2NhdG9yPSIxOToxMiIgbmFtZT0iYyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTUiIGxvY2F0b3I9IjE5OjI2LTE5OjcyIiB4c2k6dHlwZT0iQ29hbGVzY2UiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNCIgbG9jYXRvcj0iMTk6MzUtMTk6NzEiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iOSIgbG9jYXRvcj0iMTk6MzUtMTk6NDciIGFsaWFzPSJjMiI+CiAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjgiIGxvY2F0b3I9IjE5OjM1LTE5OjQ0IiBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNyIgbG9jYXRvcj0iMTk6MzYiIG5hbWU9ImMiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDxyZXR1cm4gbG9jYWxJZD0iMTMiIGxvY2F0b3I9IjE5OjQ5LTE5OjcxIj4KICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTIiIGxvY2F0b3I9IjE5OjU2LTE5OjcxIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMSIgbG9jYXRvcj0iMTk6NTYtMTk6NjUiIHBhdGg9ImRpc3BsYXkiIHNjb3BlPSJjMiIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgPC9yZXR1cm4+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImMiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMyIgbG9jYXRvcj0iMTg6MzEtMTg6NTAiIG5hbWU9ImZoaXI6Q29kZWFibGVDb25jZXB0IiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjIiIGxvY2F0b3I9IjI2OjEtMjc6MTkiIG5hbWU9IkRhdGVUZXh0IiBjb250ZXh0PSJVbmZpbHRlcmVkIiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyMiI+CiAgICAgICAgICAgICAgIDxhOnM+LyoqCiAgKiBDb252ZXJ0cyBhIEZISVIgRGF0ZSB0byB0ZXh0LgogICogQHBhcmFtIGQgLSBhIEZISVIgRGF0ZQogICogQHJldHVybnMge1N5c3RlbS5TdHJpbmd9IGEgQ1FMIFN0cmluZyBvZiB0ZXh0CiAqLwpkZWZpbmUgZnVuY3Rpb24gRGF0ZVRleHQoZCBGSElSLmRhdGUpOgogIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjIxIj4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9TdHJpbmcoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5kPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMSIgbG9jYXRvcj0iMjc6My0yNzoxOSIgeHNpOnR5cGU9IlRvU3RyaW5nIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjAiIGxvY2F0b3I9IjI3OjEyLTI3OjE4IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxOSIgbG9jYXRvcj0iMjc6MTIiIG5hbWU9ImQiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJkIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjE4IiBsb2NhdG9yPSIyNjoyOC0yNjozNiIgbmFtZT0iZmhpcjpkYXRlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjciIGxvY2F0b3I9IjM0OjEtMzU6MTkiIG5hbWU9IkRhdGVUaW1lVGV4dCIgY29udGV4dD0iVW5maWx0ZXJlZCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uRGVmIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMjciPgogICAgICAgICAgICAgICA8YTpzPi8qKgogICogQ29udmVydHMgYSBGSElSIERhdGVUaW1lIHRvIHRleHQuCiAgKiBAcGFyYW0gZCAtIGEgRkhJUiBEYXRlVGltZQogICogQHJldHVybnMge1N5c3RlbS5TdHJpbmd9IGEgQ1FMIFN0cmluZyBvZiB0ZXh0CiAqLwpkZWZpbmUgZnVuY3Rpb24gRGF0ZVRpbWVUZXh0KGQgRkhJUi5kYXRlVGltZSk6CiAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjYiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub1N0cmluZyg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI2IiBsb2NhdG9yPSIzNTozLTM1OjE5IiB4c2k6dHlwZT0iVG9TdHJpbmciPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNSIgbG9jYXRvcj0iMzU6MTItMzU6MTgiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI0IiBsb2NhdG9yPSIzNToxMiIgbmFtZT0iZCIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImQiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMjMiIGxvY2F0b3I9IjM0OjMyLTM0OjQ0IiBuYW1lPSJmaGlyOmRhdGVUaW1lIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMzYiIGxvY2F0b3I9IjQyOjEtNDc6MyIgbmFtZT0iRm9ybWF0Q29kZSIgY29udGV4dD0iVW5maWx0ZXJlZCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uRGVmIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMzYiPgogICAgICAgICAgICAgICA8YTpzPi8qKgogICogQ29udmVydHMgYSBDUUwgQ29kZSB0byBhIFR1cGxlIGNvbnRhaW5pbmcgdGhlIHN5c3RlbSwgY29kZSwgYW5kIGRpc3BsYXkgZmllbGRzLgogICogQHBhcmFtIGQgLSBhIENRTCBjb2RlCiAgKiBAcmV0dXJucyB7VHVwbGV9IGEgVHVwbGUKICovCmRlZmluZSBmdW5jdGlvbiBGb3JtYXRDb2RlKGMgU3lzdGVtLkNvZGUpOgogIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjM1Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+ewogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3lzdGVtOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zeXN0ZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2RlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2RlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LAogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZGlzcGxheTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZGlzcGxheTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogIH08L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNSIgbG9jYXRvcj0iNDM6My00NzozIiB4c2k6dHlwZT0iVHVwbGUiPgogICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzeXN0ZW0iPgogICAgICAgICAgICAgICA8dmFsdWUgbG9jYWxJZD0iMzAiIGxvY2F0b3I9IjQ0OjEzLTQ0OjIwIiBwYXRoPSJzeXN0ZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjkiIGxvY2F0b3I9IjQ0OjEzIiBuYW1lPSJjIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImNvZGUiPgogICAgICAgICAgICAgICA8dmFsdWUgbG9jYWxJZD0iMzIiIGxvY2F0b3I9IjQ1OjExLTQ1OjE2IiBwYXRoPSJjb2RlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMxIiBsb2NhdG9yPSI0NToxMSIgbmFtZT0iYyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJkaXNwbGF5Ij4KICAgICAgICAgICAgICAgPHZhbHVlIGxvY2FsSWQ9IjM0IiBsb2NhdG9yPSI0NjoxNC00NjoyMiIgcGF0aD0iZGlzcGxheSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzMyIgbG9jYXRvcj0iNDY6MTQiIG5hbWU9ImMiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJjIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjI4IiBsb2NhdG9yPSI0MjozMC00Mjo0MCIgbmFtZT0idDpDb2RlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNDQiIGxvY2F0b3I9IjU1OjEtNTY6MjYiIG5hbWU9IkdlbmVyYXRlTG9jYWxSZWZlcmVuY2UiIGNvbnRleHQ9IlVuZmlsdGVyZWQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjQ0Ij4KICAgICAgICAgICAgICAgPGE6cz4vKioKICAqIEZvcm1zIGEgbG9jYWwgcmVmZXJuY2UgdXNpbmcgYSB0eXBlIGFuZCBhbiBpZCBzdHJpbmcKICAqIEBwYXJhbSB0eXBlIC0gQSBTdHJpbmcgc3BlY2lmeWluZyB0aGUgcmVzb3VyY2UgdHlwZSBvZiB0aGUgcmVmZXJlbmNlCiAgKiBAcGFyYW0gaWQgLSBBIFN0cmluZyBzcGVjaWZ5aW5nIHRoZSByZXNvdXJjZSBpZCBvZiB0aGUgcmVmZXJlbmNlCiAgKiBAcmV0dXJucyB7U3lzdGVtLlN0cmluZ30gYSBzdHJpbmcgb2YgdGV4dCBjb250YWluaW5nIHRoZSBsb2NhbCByZWZlcmVuY2UKICovCmRlZmluZSBmdW5jdGlvbiBHZW5lcmF0ZUxvY2FsUmVmZXJlbmNlKHR5cGUgU3lzdGVtLlN0cmluZywgaWQgU3lzdGVtLlN0cmluZyk6CiAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNDMiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5Db21iaW5lKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz57PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnR5cGU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Jy8nPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPn08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQzIiBsb2NhdG9yPSI1NjozLTU2OjI2IiB4c2k6dHlwZT0iQ29tYmluZSI+CiAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNDIiIGxvY2F0b3I9IjU2OjExLTU2OjI1IiB4c2k6dHlwZT0iTGlzdCI+CiAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjM5IiBsb2NhdG9yPSI1NjoxMi01NjoxNSIgbmFtZT0idHlwZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iNDAiIGxvY2F0b3I9IjU2OjE4LTU2OjIwIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iLyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iNDEiIGxvY2F0b3I9IjU2OjIzLTU2OjI0IiBuYW1lPSJpZCIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0idHlwZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBsb2NhbElkPSIzNyIgbG9jYXRvcj0iNTU6NDUtNTU6NTciIG5hbWU9InQ6U3RyaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iaWQiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMzgiIGxvY2F0b3I9IjU1OjYzLTU1Ojc1IiBuYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjUyIiBsb2NhdG9yPSI2MzoxLTY0OjI4IiBuYW1lPSJDdWxsTnVsbFN0cmluZ3MiIGNvbnRleHQ9IlVuZmlsdGVyZWQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjUyIj4KICAgICAgICAgICAgICAgPGE6cz4vKioKICAqIFJlbW92ZXMgbnVsbCBlbnRyaWVzIGZyb20gYSBsaXN0IG9mIHN0cmluZ3MKICAqIEBwYXJhbSBsaXN0IC0gQSBsaXN0IG9mIHN0cmluZ3MKICAqIEByZXR1cm5zIHtMaXN0Jmx0O1N5c3RlbS5TdHJpbmc+fSB0aGUgaW5wdXQgbGlzdCB3aXRoIHRoZSBudWxsIGVudHJpZXMgcmVtb3ZlZAogKi8KZGVmaW5lIGZ1bmN0aW9uIEN1bGxOdWxsU3RyaW5ncyhsaXN0IExpc3QmbHQ7U3lzdGVtLlN0cmluZz4pOgogIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjUxIj4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5saXN0PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gTDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkw8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGlzIG5vdCBudWxsPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI1MSIgbG9jYXRvcj0iNjQ6My02NDoyOCIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0OCIgbG9jYXRvcj0iNjQ6My02NDo4IiBhbGlhcz0iTCI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQ3IiBsb2NhdG9yPSI2NDozLTY0OjYiIG5hbWU9Imxpc3QiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iNTAiIGxvY2F0b3I9IjY0OjEwLTY0OjI4IiB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYXRvcj0iNjQ6MTYtNjQ6MjgiIHhzaTp0eXBlPSJJc051bGwiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0OSIgbG9jYXRvcj0iNjQ6MTYiIG5hbWU9IkwiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0ibGlzdCI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBsb2NhbElkPSI0NiIgbG9jYXRvcj0iNjM6MzgtNjM6NTYiIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSBsb2NhbElkPSI0NSIgbG9jYXRvcj0iNjM6NDMtNjM6NTUiIG5hbWU9InQ6U3RyaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZFR5cGVTcGVjaWZpZXI+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNjUiIGxvY2F0b3I9IjcyOjEtNzM6NzciIG5hbWU9IkZpbmRDb25kaXRpb25EYXRlIiBjb250ZXh0PSJVbmZpbHRlcmVkIiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI2NSI+CiAgICAgICAgICAgICAgIDxhOnM+LyoqCiAgKiBGaW5kcyB0aGUgZmlyc3Qgbm9uLW51bGwgbWVhbmluZ2Z1bCBkYXRlIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIENvbmRpdGlvbi4gIFRoaXMgd2lsbCBsb29rIHRocm91Z2ggdGhlCiAgKiBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6IG9uc2V0RGF0ZVRpbWUudmFsdWUsIG9uc2V0UGVyaW9kLnN0YXJ0LCBhc3NlcnRlZERhdGUuCiAgKiBAcGFyYW0gQ29uZCAtIGEgQ29uZGl0aW9uCiAgKiBAcmV0dXJucyB7U3lzdGVtLkRhdGVUaW1lfSB0aGUgZmlyc3Qgbm9uLW51bGwgbWVhbmluZ2Z1bCBkYXRlLCBvciBudWxsIGlmIG5vbiBpcyBmb3VuZAogKi8KZGVmaW5lIGZ1bmN0aW9uIEZpbmRDb25kaXRpb25EYXRlKENvbmQgQ29uZGl0aW9uKToKICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI2NCI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjQiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPkNvYWxlc2NlKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkNvbmQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5vbnNldDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2MCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q29uZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPm9uc2V0PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXJ0PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjYzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkNvbmQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjYyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5yZWNvcmRlZERhdGU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI2NCIgbG9jYXRvcj0iNzM6My03Mzo3NyIgeHNpOnR5cGU9IkNvYWxlc2NlIj4KICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJ0OkRhdGVUaW1lIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1NiIgbG9jYXRvcj0iNzM6MTItNzM6MjciIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjU1IiBsb2NhdG9yPSI3MzoxMi03MzoyMSIgcGF0aD0ib25zZXQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTQiIGxvY2F0b3I9IjczOjEyLTczOjE1IiBuYW1lPSJDb25kIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjYwIiBsb2NhdG9yPSI3MzozMC03Mzo1MSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTkiIGxvY2F0b3I9IjczOjMwLTczOjQ1IiBwYXRoPSJzdGFydCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1OCIgbG9jYXRvcj0iNzM6MzAtNzM6MzkiIHBhdGg9Im9uc2V0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjU3IiBsb2NhdG9yPSI3MzozMC03MzozMyIgbmFtZT0iQ29uZCIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjYzIiBsb2NhdG9yPSI3Mzo1NC03Mzo3NiIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNjIiIGxvY2F0b3I9IjczOjU0LTczOjcwIiBwYXRoPSJyZWNvcmRlZERhdGUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNjEiIGxvY2F0b3I9IjczOjU0LTczOjU3IiBuYW1lPSJDb25kIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9IkNvbmQiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iNTMiIGxvY2F0b3I9IjcyOjQwLTcyOjQ4IiBuYW1lPSJmaGlyOkNvbmRpdGlvbiIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9Ijg5IiBsb2NhdG9yPSI4MToxLTgyOjg3IiBuYW1lPSJNb3N0UmVjZW50Q29uZGl0aW9uIiBjb250ZXh0PSJVbmZpbHRlcmVkIiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI4OSI+CiAgICAgICAgICAgICAgIDxhOnM+LyoqCiAgKiBGaW5kcyB0aGUgbW9zdCByZWNlbnQgQ29uZGl0aW9uIGluIGxpc3QgYnkgZXhhbWluaW5nIHRoZSBmb2xsb3dpbmcgZmllbGRzIGluCiAgKiB0aGUgZm9sbG93aW5nIG9yZGVyOiBvbnNldERhdGVUaW1lLnZhbHVlLCBvbnNldFBlcmlvZC5zdGFydCwgYXNzZXJ0ZWREYXRlLgogICogQHBhcmFtIENvbmRMaXN0IC0gYSBsaXN0IG9mIENvbmRpdGlvbnMKICAqIEByZXR1cm5zIHtDb25kaXRpb259IHRoZSBtb3N0IHJlY2VudCBDb25kaXRpb24gaW4gdGhlIGxpc3QKICovCmRlZmluZSBmdW5jdGlvbiBNb3N0UmVjZW50Q29uZGl0aW9uKENvbmRMaXN0IExpc3QmbHQ7Q29uZGl0aW9uPik6CiAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iODgiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg4Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5MYXN0KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkNvbmRMaXN0PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gQzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zb3J0IGJ5IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q29hbGVzY2UoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5vbnNldDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjgxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPm9uc2V0PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhcnQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjgyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5yZWNvcmRlZERhdGU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjgzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iODgiIGxvY2F0b3I9IjgyOjMtODI6ODciIHhzaTp0eXBlPSJMYXN0Ij4KICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI4NyIgbG9jYXRvcj0iODI6OC04Mjo4NiIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI2OSIgbG9jYXRvcj0iODI6OC04MjoxNyIgYWxpYXM9IkMiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI2OCIgbG9jYXRvcj0iODI6OC04MjoxNSIgbmFtZT0iQ29uZExpc3QiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8c29ydCBsb2NhbElkPSI4NiIgbG9jYXRvcj0iODI6MTktODI6ODYiPgogICAgICAgICAgICAgICAgICA8YnkgbG9jYWxJZD0iODUiIGxvY2F0b3I9IjgyOjI3LTgyOjg2IiBkaXJlY3Rpb249ImFzYyIgeHNpOnR5cGU9IkJ5RXhwcmVzc2lvbiI+CiAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9Ijg0IiBsb2NhdG9yPSI4MjoyNy04Mjo4NiIgeHNpOnR5cGU9IkNvYWxlc2NlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJ0OkRhdGVUaW1lIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI3OCIgbG9jYXRvcj0iODI6MzYtODI6NDYiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9Ijc3IiBsb2NhdG9yPSI4MjozNi04Mjo0MCIgbmFtZT0ib25zZXQiIHhzaTp0eXBlPSJJZGVudGlmaWVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4MSIgbG9jYXRvcj0iODI6NDktODI6NjUiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjgwIiBsb2NhdG9yPSI4Mjo0OS04Mjo1OSIgcGF0aD0ic3RhcnQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNzkiIGxvY2F0b3I9IjgyOjQ5LTgyOjUzIiBuYW1lPSJvbnNldCIgeHNpOnR5cGU9IklkZW50aWZpZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iODMiIGxvY2F0b3I9IjgyOjY4LTgyOjg1IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI4MiIgbG9jYXRvcj0iODI6NjgtODI6NzkiIG5hbWU9InJlY29yZGVkRGF0ZSIgeHNpOnR5cGU9IklkZW50aWZpZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgIDwvYnk+CiAgICAgICAgICAgICAgIDwvc29ydD4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iQ29uZExpc3QiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iNjciIGxvY2F0b3I9IjgxOjQ2LTgxOjYwIiB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbG9jYWxJZD0iNjYiIGxvY2F0b3I9IjgxOjUxLTgxOjU5IiBuYW1lPSJmaGlyOkNvbmRpdGlvbiIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICA8L29wZXJhbmRUeXBlU3BlY2lmaWVyPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9Ijk5IiBsb2NhdG9yPSI5MToxLTkyOjYwIiBuYW1lPSJGaW5kUHJvY2VkdXJlRGF0ZSIgY29udGV4dD0iVW5maWx0ZXJlZCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uRGVmIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iOTkiPgogICAgICAgICAgICAgICA8YTpzPi8qKgogICogRmluZHMgdGhlIGZpcnN0IG5vbi1udWxsIG1lYW5pbmdmdWwgZGF0ZSB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBQcm9jZWR1cmUuCiAgKiBUaGlzIHdpbGwgbG9vayB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6IHBlcmZvcm1lZERhdGVUaW1lLnZhbHVlLAogICogcGVyZm9ybWVkUGVyaW9kLnN0YXJ0LgogICogQHBhcmFtIFByb2MgLSBhIFByb2NlZHVyZQogICogQHJldHVybnMge1N5c3RlbS5EYXRlVGltZX0gdGhlIGZpcnN0IG5vbi1udWxsIG1lYW5pbmdmdWwgZGF0ZSwgb3IgbnVsbCBpZiBub24gaXMgZm91bmQKICovCmRlZmluZSBmdW5jdGlvbiBGaW5kUHJvY2VkdXJlRGF0ZShQcm9jIFByb2NlZHVyZSk6CiAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iOTgiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk4Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5Db2FsZXNjZSg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5MyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjkxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXJ0PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iOTgiIGxvY2F0b3I9IjkyOjMtOTI6NjAiIHhzaTp0eXBlPSJDb2FsZXNjZSI+CiAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0idDpEYXRlVGltZSIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTMiIGxvY2F0b3I9IjkyOjEyLTkyOjMxIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI5MiIgbG9jYXRvcj0iOTI6MTItOTI6MjUiIHBhdGg9InBlcmZvcm1lZCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI5MSIgbG9jYXRvcj0iOTI6MTItOTI6MTUiIG5hbWU9IlByb2MiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTciIGxvY2F0b3I9IjkyOjM0LTkyOjU5IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI5NiIgbG9jYXRvcj0iOTI6MzQtOTI6NTMiIHBhdGg9InN0YXJ0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9Ijk1IiBsb2NhdG9yPSI5MjozNC05Mjo0NyIgcGF0aD0icGVyZm9ybWVkIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9Ijk0IiBsb2NhdG9yPSI5MjozNC05MjozNyIgbmFtZT0iUHJvYyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iUHJvYyI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBsb2NhbElkPSI5MCIgbG9jYXRvcj0iOTE6NDAtOTE6NDgiIG5hbWU9ImZoaXI6UHJvY2VkdXJlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTE5IiBsb2NhdG9yPSIxMDA6MS0xMDE6NzUiIG5hbWU9Ik1vc3RSZWNlbnRQcm9jZWR1cmUiIGNvbnRleHQ9IlVuZmlsdGVyZWQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjExOSI+CiAgICAgICAgICAgICAgIDxhOnM+LyoqCiAgKiBGaW5kcyB0aGUgbW9zdCByZWNlbnQgUHJvY2VkdXJlIGluIGxpc3QgYnkgZXhhbWluaW5nIHRoZSBmb2xsb3dpbmcgZmllbGRzIGluCiAgKiB0aGUgZm9sbG93aW5nIG9yZGVyOiBwZXJmb3JtZWREYXRlVGltZS52YWx1ZSwgcGVyZm9ybWVkUGVyaW9kLnN0YXJ0LgogICogQHBhcmFtIENvbmRMaXN0IC0gYSBsaXN0IG9mIFByb2NlZHVyZXMKICAqIEByZXR1cm5zIHtQcm9jZWR1cmV9IHRoZSBtb3N0IHJlY2VudCBQcm9jZWR1cmUgaW4gdGhlIGxpc3QKICovCmRlZmluZSBmdW5jdGlvbiBNb3N0UmVjZW50UHJvY2VkdXJlKFByb2NMaXN0IExpc3QmbHQ7UHJvY2VkdXJlPik6CiAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTE4Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTgiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPkxhc3QoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvY0xpc3Q8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zb3J0IGJ5IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Db2FsZXNjZSg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmZvcm1lZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGFydDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjExOCIgbG9jYXRvcj0iMTAxOjMtMTAxOjc1IiB4c2k6dHlwZT0iTGFzdCI+CiAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTE3IiBsb2NhdG9yPSIxMDE6OC0xMDE6NzQiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTAzIiBsb2NhdG9yPSIxMDE6OC0xMDE6MTciIGFsaWFzPSJQIj4KICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTAyIiBsb2NhdG9yPSIxMDE6OC0xMDE6MTUiIG5hbWU9IlByb2NMaXN0IiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHNvcnQgbG9jYWxJZD0iMTE2IiBsb2NhdG9yPSIxMDE6MTktMTAxOjc0Ij4KICAgICAgICAgICAgICAgICAgPGJ5IGxvY2FsSWQ9IjExNSIgbG9jYXRvcj0iMTAxOjI3LTEwMTo3NCIgZGlyZWN0aW9uPSJhc2MiIHhzaTp0eXBlPSJCeUV4cHJlc3Npb24iPgogICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxMTQiIGxvY2F0b3I9IjEwMToyNy0xMDE6NzQiIHhzaTp0eXBlPSJDb2FsZXNjZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0idDpEYXRlVGltZSIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTEwIiBsb2NhdG9yPSIxMDE6MzYtMTAxOjUwIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMDkiIGxvY2F0b3I9IjEwMTozNi0xMDE6NDQiIG5hbWU9InBlcmZvcm1lZCIgeHNpOnR5cGU9IklkZW50aWZpZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjExMyIgbG9jYXRvcj0iMTAxOjUzLTEwMTo3MyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTEyIiBsb2NhdG9yPSIxMDE6NTMtMTAxOjY3IiBwYXRoPSJzdGFydCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMTEiIGxvY2F0b3I9IjEwMTo1My0xMDE6NjEiIG5hbWU9InBlcmZvcm1lZCIgeHNpOnR5cGU9IklkZW50aWZpZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICA8L2J5PgogICAgICAgICAgICAgICA8L3NvcnQ+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlByb2NMaXN0Ij4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjEwMSIgbG9jYXRvcj0iMTAwOjQ2LTEwMDo2MCIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgPGVsZW1lbnRUeXBlIGxvY2FsSWQ9IjEwMCIgbG9jYXRvcj0iMTAwOjUxLTEwMDo1OSIgbmFtZT0iZmhpcjpQcm9jZWR1cmUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgPC9vcGVyYW5kVHlwZVNwZWNpZmllcj4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIxMjkiIGxvY2F0b3I9IjExMDoxLTExMTo3MiIgbmFtZT0iTWVkaWNhdGlvblN0YXRlbWVudERhdGUiIGNvbnRleHQ9IlVuZmlsdGVyZWQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjEyOSI+CiAgICAgICAgICAgICAgIDxhOnM+LyoqCiAgKiBGaW5kcyB0aGUgZmlyc3Qgbm9uLW51bGwgbWVhbmluZ2Z1bCBkYXRlIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIE1lZGljYXRpb25TdGF0ZW1lbnQuCiAgKiBUaGlzIHdpbGwgbG9vayB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6IGVmZmVjdGl2ZURhdGVUaW1lLAogICogcy5lZmZlY3RpdmVQZXJpb2QuJnF1b3Q7c3RhcnQmcXVvdDsuCiAgKiBAcGFyYW0gUHJvYyAtIGEgTWVkaWNhdGlvblN0YXRlbWVudAogICogQHJldHVybnMge1N5c3RlbS5TdHJpbmd9IHRoZSBmaXJzdCBub24tbnVsbCBtZWFuaW5nZnVsIGRhdGUsIG9yIG51bGwgaWYgbm9uIGlzIGZvdW5kCiAqLwpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvblN0YXRlbWVudERhdGUocyBGSElSLk1lZGljYXRpb25TdGF0ZW1lbnQpOgogIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjEyOCI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI4Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5Db2FsZXNjZSg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjMiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkRhdGVUaW1lVGV4dCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTIyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lZmZlY3RpdmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjciPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkRhdGVUaW1lVGV4dCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVmZmVjdGl2ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7c3RhcnQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjEyOCIgbG9jYXRvcj0iMTExOjMtMTExOjcyIiB4c2k6dHlwZT0iQ29hbGVzY2UiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMjMiIGxvY2F0b3I9IjExMToxMi0xMTE6MzYiIG5hbWU9IkRhdGVUaW1lVGV4dCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOmRhdGVUaW1lIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMjIiIGxvY2F0b3I9IjExMToyNS0xMTE6MzUiIHBhdGg9ImVmZmVjdGl2ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMjEiIGxvY2F0b3I9IjExMToyNSIgbmFtZT0icyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTI3IiBsb2NhdG9yPSIxMTE6MzktMTExOjcxIiBuYW1lPSJEYXRlVGltZVRleHQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEyNiIgbG9jYXRvcj0iMTExOjUyLTExMTo3MCIgcGF0aD0ic3RhcnQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTI1IiBsb2NhdG9yPSIxMTE6NTItMTExOjYyIiBwYXRoPSJlZmZlY3RpdmUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTI0IiBsb2NhdG9yPSIxMTE6NTIiIG5hbWU9InMiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJzIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjEyMCIgbG9jYXRvcj0iMTEwOjQzLTExMDo2NiIgbmFtZT0iZmhpcjpNZWRpY2F0aW9uU3RhdGVtZW50IiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgIDwvc3RhdGVtZW50cz4KPC9saWJyYXJ5Pgo="/>
  </content>
</Library>