<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>OpenStreetMap</Name>
    <Version>10.1.2</Version>
    <Vendor>Rother OSS GmbH</Vendor>
    <URL>https://otobo.io/</URL>
    <License>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</License>
    <ChangeLog Date="2026-05-13 15:30:12" Version="10.1.2">Add Hungarian translation.</ChangeLog>
    <ChangeLog Date="2023-06-07 13:25:37" Version="10.1.1">Initial release on OTOBO 10.1.</ChangeLog>
    <Description Lang="en">Adds an interface to OpenStreetMap.</Description>
    <Description Lang="hu">Kapcsolódási felületet ad az OpenStreetMap-térképhez.</Description>
    <Framework>10.1.x</Framework>
    <IntroInstall Lang="en" Title="Installation Information" Type="pre">
        &lt;br/&gt;
        &lt;br/&gt;
        This plugin relies on the tile servers of OpenStreetMap (https://www.openstreetmap.org/about). If you plan on using it, please consider donating to them (https://wiki.osmfoundation.org/wiki/Donate), to help them keeping their servers running. (When doing this, you could tell them who sent you. ;)
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;
    </IntroInstall>
    <IntroInstall Lang="hu" Title="Telepítési információk" Type="pre">
        &lt;br/&gt;
        &lt;br/&gt;
        Ez a bővítmény az OpenStreetMap csempekiszolgálóira támaszkodik (https://www.openstreetmap.org/about). Ha azt tervezi, hogy használni fogja, akkor fontolja meg, hogy adományozzon nekik (https://wiki.osmfoundation.org/wiki/Donate), hogy segítsen a kiszolgálóik működésének fenntartásában. Ha ezt teszi, akkor elmondhatja nekik, hogy ki küldte Önt. ;)
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;
    </IntroInstall>
    <BuildCommitID>d5897d894913c070c865c0aea61bd980108226d0</BuildCommitID>
    <BuildDate>2026-05-13 15:30:16</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Kernel/Config/Files/XML/OpenStreetMap.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJBcHBsaWNhdGlvbiI+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpTaG93Rm9yQ2xhc3NlcyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gb3Igd2hpY2ggY2xhc3NlcyB0aGUgbWFwIGlzIGRpc3BsYXllZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSVRTTUNvbmZpZ0l0ZW06OkxpbmUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IklUU01Db25maWdJdGVtOjpMb2NhdGlvbiI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpJbmNpZGVudFN0YXRlQ29sb3JzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbG9yIHJlcHJlc2VudGF0aW9uIG9mIGluY2lkZW50IHN0YXRlcyBvbiB0aGUgbWFwLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPcGVyYXRpb25hbCI+IzIyZTVhMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV2FybmluZyI+I2UwZDA0MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW5jaWRlbnQiPiNmZjMwMDA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFnZW50T3BlblN0cmVldE1hcCMjIzQzNy1PU00iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5PcGVuU3RyZWV0TWFwLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNTUyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLk9wZW5TdHJlZXRNYXAuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkN1c3RvbWVyT3BlblN0cmVldE1hcCMjIzQzNy1PU00iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5PcGVuU3RyZWV0TWFwLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNTUyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLk9wZW5TdHJlZXRNYXAuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFnZW50RGFzaGJvYXJkIyMjNDM3LU9TTSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLk9wZW5TdHJlZXRNYXAuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuT3BlblN0cmVldE1hcC5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6Q3VzdG9tZXJEYXNoYm9hcmQjIyM0MzctT1NNIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuT3BlblN0cmVldE1hcC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5PcGVuU3RyZWV0TWFwLmNzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudElUU01Db25maWdJdGVtWm9vbSMjIzQzNy1PU00iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5PcGVuU3RyZWV0TWFwLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNTUyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLk9wZW5TdHJlZXRNYXAuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50T3BlblN0cmVldE1hcCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+T3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPk9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj5DTURCPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpOYXZpZ2F0aW9uIyMjQWdlbnRJVFNNQ29uZmlnSXRlbSMjIzAwNC1PcGVuU3RyZWV0TWFwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1haW4gbWVudSBpdGVtIHJlZ2lzdHJhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kTmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLWNvbmZpZ2l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+T3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5NYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50T3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rT3B0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyIj5Db25maWcgSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY2Nlc3NLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4yMTA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJDdXN0b21lckZyb250ZW5kOjpNb2R1bGUjIyNDdXN0b21lck9wZW5TdHJlZXRNYXAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpDdXN0b21lcjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPk9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5PcGVuU3RyZWV0TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok5hdmlnYXRpb24jIyNDdXN0b21lck9wZW5TdHJlZXRNYXAjIyMwMDItT3BlblN0cmVldE1hcCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYWluIG1lbnUgaXRlbSByZWdpc3RyYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZE5hdmlnYXRpb24iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+U2hvdyB0aGUgT3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPk1hcDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249Q3VzdG9tZXJPcGVuU3RyZWV0TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtPcHRpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXIiPk1hcDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5NZW51PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWNjZXNzS2V5Ij5vPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjcyMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzdmdJY29uIj52YXIvaHR0cGQvaHRkb2NzL3NraW5zL0N1c3RvbWVyL2RlZmF1bHQvaW1nL21hcC5zdmc8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJEYXNoYm9hcmRCYWNrZW5kIyMjMDAwMi1PcGVuU3RyZWV0TWFwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlBhcmFtZXRlcnMgZm9yIHRoZSBPcGVuU3RyZWV0TWFwIGRhc2hib2FyZCBiYWNrZW5kLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpEYXNoYm9hcmQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6RGFzaGJvYXJkOjpPcGVuU3RyZWV0TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5PcGVuU3RyZWV0TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5PcGVuU3RyZWV0TWFwIHdpdGggQ29uZmlnSXRlbXMgYW5kIEN1c3RvbWVycy48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhY2hlVFRMTG9jYWwiPjE0NDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj5Db250ZW50TGFyZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlZmF1bHQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hbmRhdG9yeSI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6T3V0cHV0OjpGaWx0ZXJFbGVtZW50UG9zdCMjI091dHB1dEZpbHRlclBvc3RPcGVuU3RyZWV0TWFwQ0lXaWRnZXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+T3V0cHV0IGZpbHRlciB0byBhZGQgYW4gT3BlblN0cmVldE1hcCB3aWRnZXQgdG8gdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tIHNjcmVlbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpPdXRwdXRGaWx0ZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6RmlsdGVyRWxlbWVudFBvc3Q6Ok9wZW5TdHJlZXRNYXBDSVdpZGdldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGVtcGxhdGVzIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudElUU01Db25maWdJdGVtWm9vbSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+TG9jYXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPktlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPi9vdG9iby13ZWIvc2tpbnMvQWdlbnQvZGVmYXVsdC9pbWcvTG9jYXRpb24uc3ZnPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPkJhc2ljQ0lJbmZvMDE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj5HUFNMYXRpdHVkZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+R1BTTG9uZ2l0dWRlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAwMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj5MaW5lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj5LZXJuZWw6OlN5c3RlbTo6T3BlblN0cmVldE1hcDo6TGluZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+I2ZmMDAwMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMDQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMDUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMDYiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMDciIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMDgiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMDkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTYiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTciIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTgiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMjAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6QWN0aW9uQ29uZmlnIyMjMDAxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBob3cgdGhlIG1hcCBpcyBwcmVzZW50ZWQgZm9yIGEgZ2l2ZW4gYWN0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6QWN0aW9uQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNQ29uZmlnSXRlbVpvb208L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNob3ciPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+U2VsZjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXJnaW4iPjAuMjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWcjIyMwMDIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIGhvdyB0aGUgbWFwIGlzIHByZXNlbnRlZCBmb3IgYSBnaXZlbiBhY3Rpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudERhc2hib2FyZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2hvdyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+TGluZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXJnaW4iPjAuNDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWcjIyMwMDMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIGhvdyB0aGUgbWFwIGlzIHByZXNlbnRlZCBmb3IgYSBnaXZlbiBhY3Rpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudE9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNob3ciPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkxpbmU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFyZ2luIj4xLjI8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6QWN0aW9uQ29uZmlnIyMjMDA0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBob3cgdGhlIG1hcCBpcyBwcmVzZW50ZWQgZm9yIGEgZ2l2ZW4gYWN0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6QWN0aW9uQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+Q3VzdG9tZXJEYXNoYm9hcmQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNob3ciPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFyZ2luIj4wLjQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6QWN0aW9uQ29uZmlnIyMjMDA1IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBob3cgdGhlIG1hcCBpcyBwcmVzZW50ZWQgZm9yIGEgZ2l2ZW4gYWN0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6QWN0aW9uQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+Q3VzdG9tZXJPcGVuU3RyZWV0TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTaG93Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmdpbiI+MS40PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6Okljb25PdmVycmlkZSMjI0Jhc2ljQ0lJbmZvMDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+T3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGljb24gYmFzZWQgb24gY29uZmlnIGl0ZW0gaW5mb3JtYXRpb24uIERlZmluZSAiU3RhdGVzIiBhbmQgYXNzaWduICJJY29uUGF0aHMiIHRvIHRoZW0uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6Okljb25zOjpCYXNpY0NJSW5mbzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGVzIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGFuZ2VyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VySW5jaVN0YXRlIj5JbmNpZGVudDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckRlcGxTdGF0ZSI+UHJvZHVjdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGhzIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYW5nZXIiPi9vdG9iby13ZWIvc2tpbnMvQWdlbnQvZGVmYXVsdC9pbWcvTG9jYXRpb25SZWQuc3ZnPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJDdXN0b21lckRhc2hib2FyZDo6VGlsZXMjIyNPcGVuU3RyZWV0TWFwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRpbGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQ3VzdG9tZXJEYXNoYm9hcmQuIE1vZHVsZSBpcyByZXF1aXJlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpDdXN0b21lcjo6Vmlldzo6RGFzaGJvYXJkOjpUaWxlczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPcmRlciI+NzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGVtcGxhdGUiPkRhc2hib2FyZC9UaWxlT1NNQ2FudmFzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWciPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgo=</File>
        <File Location="Kernel/Language/hu_OpenStreetMap.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omh1X09wZW5TdHJlZXRNYXA7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBPcGVuU3RyZWV0TWFwV2lkZ2V0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuU3RyZWV0TWFwJ30gPSAnT3BlblN0cmVldE1hcCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9yIHJlcHJlc2VudGF0aW9uIG9mIGluY2lkZW50IHN0YXRlcyBvbiB0aGUgbWFwLid9ID0gJ0EgdMOpcmvDqXBlbiBsw6l2xZEgaW5jaWRlbnPDoWxsYXBvdG9rIHN6w61uw6FicsOhem9sw6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuJ30gPQogICAgICAgICdCZcOhbGzDrXRqYSBhIGjDoXR0w6lycHJvZ3JhbS1pbmZvcm3DoWNpw7NrYXQgYXogZWd5ZXMgb3N6dMOhbHlva27DoWwuIEEg4oCeTG9jYXRpb25JbmZv4oCdIHRhcnRhbG1hemhhdGphIGEgaGVseWluZm9ybcOhY2nDs2thdCwgYW1lbHlla2V0IHZhZ3kgYSDigJ5Tb3VyY2VLZXlz4oCdIGZvcnLDoXNrdWxjc2JhbiBrZWxsIG1lZ2Fkbmkgc3rDqWxlc3PDqWcgKOKAnkxhdGl0dWRl4oCdKSDDqXMgaG9zc3rDunPDoWcgKOKAnkxvbmdpdHVkZeKAnSkgZm9ybcOhYmFuLCB2YWd5IGEg4oCeTGlua2VkQ2xhc3Nlc+KAnSBrdWxjc2JhbiBsw6l2xZEga2FwY3NvbHQgb3N6dMOhbHlva2thbCwgYW1lbHllayB0YXJ0YWxtYXp6w6FrIGEga29vcmRpbsOhdMOha2F0LiBBIOKAnkxpbmVDb2xvcuKAnSBhZGphIG1lZyBhIHZvbmFsIHN6w61uw6l0LCBhbWVseSB2YWd5IOKAniNyZ2LigJ0gKHDDqWxkw6F1bCDigJ4jZmYwMDAw4oCdKSB2YWd5IMO8emVtYmUgw6FsbMOtdMOhc2kgw6FsbGFwb3QgKOKAnkRlcGxveW1lbnRTdGF0ZeKAnSkgdmFneSBpbmNpZGVuc8OhbGxhcG90ICjigJ5JbmNpZGVudFN0YXRl4oCdKSBsZWhldCwgaG9neSBlZ3llenplbiBhIG1lZ2Fkb3R0IHN6w61ubmVsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0ZXMgaG93IHRoZSBtYXAgaXMgcHJlc2VudGVkIGZvciBhIGdpdmVuIGFjdGlvbi4nfSA9ICdBenQgw6FsbMOtdGphIGJlLCBob2d5IGEgdMOpcmvDqXAgaG9neWFuIGplbGVuamVuIG1lZyBlZ3kgYWRvdHQgbcWxdmVsZXRuw6lsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3Igd2hpY2ggY2xhc3NlcyB0aGUgbWFwIGlzIGRpc3BsYXllZC4nfSA9ICdNZWx5aWsgb3N6dMOhbHlva27DoWwgamVsZW5qZW4gbWVnIGEgdMOpcmvDqXAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcCd9ID0gJ1TDqXJrw6lwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW5TdHJlZXRNYXAgd2l0aCBDb25maWdJdGVtcyBhbmQgQ3VzdG9tZXJzLid9ID0gJ09wZW5TdHJlZXRNYXAga29uZmlndXLDoWNpw7NlbGVtZWtrZWwgw6lzIMO8Z3lmZWxla2tlbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0cHV0IGZpbHRlciB0byBhZGQgYW4gT3BlblN0cmVldE1hcCB3aWRnZXQgdG8gdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tIHNjcmVlbi4nfSA9CiAgICAgICAgJ0tpbWVuZXRzesWxcsWRIGFoaG96LCBob2d5IE9wZW5TdHJlZXRNYXAgZmVsw7xsZXRpIGVsZW1ldCBhZGpvbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IGtvbmZpZ3Vyw6FjacOzZWxlbS1uYWd5w610w6FzIGvDqXBlcm55xZFqw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJyaWRlcyB0aGUgZGVmYXVsdCBpY29uIGJhc2VkIG9uIGNvbmZpZyBpdGVtIGluZm9ybWF0aW9uLiBEZWZpbmUgIlN0YXRlcyIgYW5kIGFzc2lnbiAiSWNvblBhdGhzIiB0byB0aGVtLid9ID0KICAgICAgICAnRmVsw7xsYsOtcsOhbGphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgaWtvbnQgYSBrb25maWd1csOhY2nDs2VsZW0taW5mb3Jtw6FjacOzayBhbGFwasOhbi4gQSDigJ5TdGF0ZXPigJ0gaGF0w6Fyb3p6YSBtZWcgYXogw6FsbGFwb3Rva2F0LCDDqXMgYXog4oCeSWNvblBhdGhz4oCdIHJlbmRlbGkgaG96esOhanVrIGF6IGlrb27DunR2b25hbGFrYXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBPcGVuU3RyZWV0TWFwIGRhc2hib2FyZCBiYWNrZW5kLid9ID0gJ1BhcmFtw6l0ZXJlayBheiBPcGVuU3RyZWV0TWFwIHZlesOpcmzFkXB1bHQgaMOhdHTDqXJwcm9ncmFtasOhaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoZSBPcGVuU3RyZWV0TWFwJ30gPSAnQXogT3BlblN0cmVldE1hcCBtZWdqZWxlbsOtdMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aWNrZXRzIG9uIGEgbWFwLid9ID0gJ0plZ3llayBtZWdqZWxlbsOtdMOpc2UgZWd5IHTDqXJrw6lwZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBNYXAnfSA9ICdKZWd5dMOpcmvDqXAnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Output/HTML/FilterElementPost/OpenStreetMapCIWidget.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZpbHRlckVsZW1lbnRQb3N0OjpPcGVuU3RyZWV0TWFwQ0lXaWRnZXQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ09iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCiAgICAjIGdldCB0aGUgYWN0aXZlIGNsYXNzZXMKICAgIG15ICRTaG93TWFwQ2xhc3NlcyA9ICRDb25maWdPYmplY3QtPkdldCgnT3BlblN0cmVldE1hcDo6U2hvd0ZvckNsYXNzZXMnKTsKICAgIHJldHVybiAxIGlmICEkU2hvd01hcENsYXNzZXM7CgogICAgIyBnZXQgdGhlIHZlcnNpb24gb2YgdGhlIHNob3duIENJCiAgICAkU2VsZi0+e1JlcXVlc3RlZFVSTH0gPX4gL0NvbmZpZ0l0ZW1JRD0oXGQrKS87CiAgICByZXR1cm4gMSBpZiAhJDE7CgogICAgbXkgJFZlcnNpb24gPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJDEsCiAgICAgICAgWE1MRGF0YUdldCAgID0+IDAsCiAgICApOwoKICAgICMgaW5zZXJ0IG1hcCBpZiBDSSBiZWxvbmdzIHRvIGFjdGl2ZSBjbGFzcwogICAgaWYgKCAkU2hvd01hcENsYXNzZXMtPnsgJ0lUU01Db25maWdJdGVtOjonIC4gJFZlcnNpb24tPntDbGFzc30gfSApIHsKICAgICAgICBteSAkT1NNQ2FudmFzID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnT3BlblN0cmVldE1hcFdpZGdldCcsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7fSwKICAgICAgICApOwoKICAgICAgICAjIGluc2VydCBhdCB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0aGUgc2lkZWJhciBjb2x1bW4KICAgICAgICAkeyAkUGFyYW17RGF0YX0gfSA9fiBzL14oXHMrPFwvZGl2PlxzKlxuXHMrPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+KS8kT1NNQ2FudmFzXG4kMS9tOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=</File>
        <File Location="Kernel/Output/HTML/Dashboard/OpenStreetMap.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IFpudW55IEdtYkgsIGh0dHA6Ly96bnVueS5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6Ok9wZW5TdHJlZXRNYXA7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjICAgICRTZWxmLT57UHJlZktleVNob3dufSAgICA9ICdVc2VyRGFzaGJvYXJkUHJlZicgLiAkU2VsZi0+e05hbWV9IC4gJy1TaG93bic7CiAgICAjICAgICRTZWxmLT57UHJlZktleVNob3duTWF4fSA9ICdVc2VyRGFzaGJvYXJkUHJlZicgLiAkU2VsZi0+e05hbWV9IC4gJy1TaG93bk1heCc7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUHJlZmVyZW5jZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgICMKICAgICMgICAgIyBkaXNhYmxlIHBhcmFtcwogICAgcmV0dXJuOwp9CgpzdWIgQ29uZmlnIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgIyAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICBteSAlQ29uZmlnID0gKAogICAgICAgICV7ICRTZWxmLT57Q29uZmlnfSB9LAoKICAgICAgICAjICAgICAgICBMaW5rICAgICAgICAgICAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30gLiAnQWN0aW9uPUFnZW50Q3VzdG9tZXJNYXAnLAogICAgICAgICMgICAgICAgIExpbmtUaXRsZSAgICAgICAgICAgICAgICAgPT4gJ0RldGFpbCcsCiAgICAgICAgIyAgICAgICAgUHJlZmVyZW5jZXNSZWxvYWRSZXF1aXJlZCA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gJUNvbmZpZzsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQ29udGVudExhcmdlT3BlblN0cmVldE1hcCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFdpZHRoICA9PiAnMTAwJScsCiAgICAgICAgICAgIEhlaWdodCA9PiAnNDAwcHgnLAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICRDb250ZW50ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnREYXNoYm9hcmRPcGVuU3RyZWV0TWFwJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAkQ29udGVudDsKfQoKMTsK</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentOpenStreetMap.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxkaXYgY2xhc3M9Ik9wZW5TdHJlZXRNYXBXaW5kb3ciIGlkPSJPU00iPgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgPGZpZ3VyZSBpZD0ib3BlbnN0cmVldG1hcC1jYW52YXMiIHN0eWxlPSdoZWlnaHQ6NzV2aDttYXJnaW46MHB4Oyc+CiAgICAgICAgPC9maWd1cmU+CiAgICA8L2Rpdj4KPC9kaXY+Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/CustomerOpenStreetMap.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxkaXYgaWQ9J29vb0NvbnRlbnQnIGNsYXNzPSdPU00nPgogICAgPGRpdiBpZD0nb29vSGVhZGVyJz4KICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKERhdGEuVGl0bGUpIHwgaHRtbCAlXTwvaDE+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9J29vb01haW5Cb3gnPgogICAgICAgIDxmaWd1cmUgaWQ9Im9wZW5zdHJlZXRtYXAtY2FudmFzIj4KICAgICAgICA8L2ZpZ3VyZT4KICAgIDwvZGl2Pgo8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/OpenStreetMapWidget.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiT3BlblN0cmVldE1hcCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWd1cmUgaWQ9Im9wZW5zdHJlZXRtYXAtY2FudmFzIiBzdHlsZT0naGVpZ2h0OjMwMHB4O21hcmdpbjowcHg7Jz4KICAgICAgICAgICAgICAgICAgICA8L2ZpZ3VyZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentDashboardOpenStreetMap.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IFpudW55IEdtYkgsIGh0dHA6Ly96bnVueS5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDb250ZW50TGFyZ2VPcGVuU3RyZWV0TWFwIikgJV0KPGRpdiBpZD0ib3BlbnN0cmVldG1hcC1jYW52YXMiIHN0eWxlPSJ3aWR0aDogWyUgRGF0YS5XaWR0aCAlXTsgaGVpZ2h0OiBbJSBEYXRhLkhlaWdodCAlXTsiPgogICAgPHA+CiAgICAgICAgICBbJSBUcmFuc2xhdGUoIkxvYWRpbmcuLi4iKSB8IGh0bWwgJV0KICAgIDwvcD4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJDb250ZW50TGFyZ2VPcGVuU3RyZWV0TWFwIikgJV0K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/Dashboard/TileOSMCanvas.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxkaXYgaWQ9Im9vb1RpbGVbJSBEYXRhLlRpbGVJRCB8IGh0bWwgJV0iIGNsYXNzPSJvb29UaWxlIG9vb1RpbGVfT1NNQ2FudmFzIj4KICAgIDxmaWd1cmUgaWQ9Im9wZW5zdHJlZXRtYXAtY2FudmFzIj4KICAgIDwvZmlndXJlPgo8L2Rpdj4K</File>
        <File Location="Kernel/System/OpenStreetMap/Line.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMaW5lOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6OkxpbmUgLSBCYWNrZW5kIGZvciBJVFNNQ29uZmlnSXRlbSBjbGFzc2VzIGxpbmtlZCB0byB0d28gbG9jYXRpb25zCgo9aGVhZDEgREVTQ1JJUFRJT04KCkZ1bmN0aW9ucyB0byBnZW5lcmF0ZSB0aGUgbWFwIHNlY3Rpb24gYW5kIGljb24gbG9jYXRpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdC4gRG8gbm90IHVzZSBpdCBkaXJlY3RseSwgaW5zdGVhZCB1c2U6CgogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6T3BlblN0cmVldE1hcDo6TGluZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBHYXRoZXJJbmZvKCkKCkdhdGhlcnMgbG9jYXRpb24gYW5kIGljb24gaW5mby4KCiAgICBteSAlSW5mbyA9ICRCYWNrZW5kT2JqZWN0LT5HYXRoZXJJbmZvKAogICAgICAgIENsYXNzICAgICAgICA9PiAnTGluZV9DbGFzcycsCiAgICAgICAgQmFja2VuZERlZiAgID0+ICRCYWNrZW5kRGVmLAogICAgICAgIEljb25QYXRoICAgICA9PiAndmFyL2h0dHBkL2h0ZG9jcy9Sb3RoZXJPU1MtT3BlblN0cmVldE1hcC8nICMgb3B0aW9uYWwKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsOiBvbmx5IGNvbnNpZGVyIENvbmZpZ0l0ZW1JRCAxMjMsIGluc3RlYWQgb2Ygd2hvbGUgY2xhc3MKICAgICk7Cgo9Y3V0CgpzdWIgR2F0aGVySW5mbyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvQmFja2VuZERlZiBDbGFzcy8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgogICAgbXkgQENJczsKICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgcHVzaCBAQ0lzLCAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKICAgICAgICBteSAlQ2xhc3NUb0lEICAgICAgICAgICAgPSByZXZlcnNlICV7ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycgKSB9OwoKICAgICAgICBwdXNoIEBDSXMsIEB7CiAgICAgICAgICAgICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtUmVzdWx0TGlzdCgKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzVG9JRHsgJFBhcmFte0NsYXNzfSB9LAogICAgICAgICAgICApCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkTGlua09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CgogICAgIyBnZXQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgY2xhc3MgYmFja2VuZHMKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJUxpbmtCYWNrZW5kRGVmCiAgICAgICAgPSBtYXAgeyAkXy0+e0NsYXNzfSA9PiAkXyB9IHZhbHVlcyAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ09wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnJykgfTsKCiAgICAjIGNvbG9yIGRlZmluaXRpb25zCiAgICBteSAkSW5jaWRlbnRTdGF0ZUNvbG9yczsKICAgIGlmICggJFBhcmFte0JhY2tlbmREZWZ9e0xpbmVDb2xvcn0gZXEgIkluY2lkZW50U3RhdGUiICkgewogICAgICAgICRJbmNpZGVudFN0YXRlQ29sb3JzID0gJENvbmZpZ09iamVjdC0+R2V0KCdPcGVuU3RyZWV0TWFwOjpJbmNpZGVudFN0YXRlQ29sb3JzJyk7CiAgICB9CgogICAgI3VzZSBEYXRhOjpEdW1wZXI7CiAgICAjcHJpbnQgU1RERVJSICJ2bzYwIC0gQ0lzOiAiLkR1bXBlcihcQENJcyk7CiAgICBteSAoICRGcm9tLCAkVG8sICVJY29ucywgJUxpbmVzICk7CiAgICBDSToKICAgIGZvciBteSAkQ29uZmlnSXRlbSAoQENJcykgewoKICAgICAgICBteSAkTGlua0xpc3QgPSAkTGlua09iamVjdC0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICAgICAgT2JqZWN0ID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgIEtleSAgICA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSBARW5kczsKCiAgICAgICAgTElOS1M6CiAgICAgICAgZm9yIG15ICRMVHlwZXMgKCB2YWx1ZXMgJXskTGlua0xpc3R9ICkgewogICAgICAgICAgICBmb3IgbXkgJExEaXJzICggdmFsdWVzICV7JExUeXBlc30gKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJENJTnVtcyAoIHZhbHVlcyAleyRMRGlyc30gKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRMaW5rZWRJdGVtICggdmFsdWVzICV7JENJTnVtc30gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkRW5kc1swXSAmJiAkTGlua2VkSXRlbS0+e0NsYXNzfSBlcSAkUGFyYW17QmFja2VuZERlZn17TG9jYXRpb25JbmZvfXtMaW5rZWRDbGFzc2VzfVswXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFbmRzWzBdID0gJExpbmtlZEl0ZW0tPntDb25maWdJdGVtSUR9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkRW5kc1sxXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IExJTktTOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICEkRW5kc1sxXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJExpbmtlZEl0ZW0tPntDbGFzc30gZXEgJFBhcmFte0JhY2tlbmREZWZ9e0xvY2F0aW9uSW5mb317TGlua2VkQ2xhc3Nlc31bMV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVuZHNbMV0gPSAkTGlua2VkSXRlbS0+e0NvbmZpZ0l0ZW1JRH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRFbmRzWzBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgTElOS1M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIEBFbmRzICE9IDIgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIHR3byBlbmRzISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIG15IEBJbmZvOwogICAgICAgIGZvciBteSAkaSAoIDAsIDEgKSB7CiAgICAgICAgICAgIG15ICRCYWNrZW5kT2JqZWN0CiAgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoICRMaW5rQmFja2VuZERlZnsgJFBhcmFte0JhY2tlbmREZWZ9e0xvY2F0aW9uSW5mb317TGlua2VkQ2xhc3Nlc31bJGldIH17QmFja2VuZH0gKTsKCiAgICAgICAgICAgICV7ICRJbmZvWyRpXSB9ID0gJEJhY2tlbmRPYmplY3QtPkdhdGhlckluZm8oCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJEVuZHNbJGldLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9WyRpXSwKICAgICAgICAgICAgICAgIEJhY2tlbmREZWYgICA9PiAkTGlua0JhY2tlbmREZWZ7ICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9WyRpXSB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJEluZm9bJGlde0Zyb219IHx8ICEkSW5mb1skaV17VG99ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIGNvb3JkaW5hdGVzIGZvdW5kIGZvciBsaW5rZWQgQ29uZmlnSXRlbTogJEVuZHNbJGldISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbmV4dCBDSTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRpICggMCwgMSApIHsKCiAgICAgICAgICAgICMgZGVmaW5lIGNvb3JkaW5hdGVzCiAgICAgICAgICAgIGlmICggISRGcm9tICkgewogICAgICAgICAgICAgICAgJEZyb20gPSBbICRJbmZvWyRpXXtGcm9tfVswXSwgJEluZm9bJGlde0Zyb219WzFdIF07CiAgICAgICAgICAgICAgICAkVG8gICA9IFsgJEluZm9bJGlde1RvfVswXSwgICAkSW5mb1skaV17VG99WzFdIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoICRGcm9tLT5bMF0gPiAkSW5mb1skaV17RnJvbX1bMF0gKSB7ICRGcm9tLT5bMF0gPSAkSW5mb1skaV17RnJvbX1bMF0gfQogICAgICAgICAgICAgICAgaWYgKCAkRnJvbS0+WzFdID4gJEluZm9bJGlde0Zyb219WzFdICkgeyAkRnJvbS0+WzFdID0gJEluZm9bJGlde0Zyb219WzFdIH0KICAgICAgICAgICAgICAgIGlmICggJFRvLT5bMF0gPCAkSW5mb1skaV17VG99WzBdICkgICAgIHsgJFRvLT5bMF0gICA9ICRJbmZvWyRpXXtUb31bMF0gfQogICAgICAgICAgICAgICAgaWYgKCAkVG8tPlsxXSA8ICRJbmZvWyRpXXtUb31bMV0gKSAgICAgeyAkVG8tPlsxXSAgID0gJEluZm9bJGlde1RvfVsxXSB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGljb25zIGlmIG9ubHkgdGhpcyBDb25maWdJdGVtIGlzIHNob3duCiAgICAgICAgICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gJiYgJEluZm9bJGlde0ljb25zfSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkQXR0ciAocXcvUGF0aCBMYXRpdHVkZSBMb25naXR1ZGUgTGluay8pIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRJY29uc3skQXR0cn0gfSwgQHsgJEluZm9bJGlde0ljb25zfXskQXR0cn0gfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhZGQgbGluZSAoTGlua1NlbGYgb25seSBmb3IgYWdlbnRzKQogICAgICAgIHB1c2ggQHsgJExpbmVze0Zyb20wfSB9LCAkSW5mb1swXXtGcm9tfVswXTsKICAgICAgICBwdXNoIEB7ICRMaW5lc3tGcm9tMX0gfSwgJEluZm9bMF17RnJvbX1bMV07CiAgICAgICAgcHVzaCBAeyAkTGluZXN7VG8wfSB9LCAgICRJbmZvWzFde0Zyb219WzBdOwogICAgICAgIHB1c2ggQHsgJExpbmVze1RvMX0gfSwgICAkSW5mb1sxXXtGcm9tfVsxXTsKICAgICAgICBwdXNoIEB7ICRMaW5lc3tDb2xvcn0gfSwKICAgICAgICAgICAgJEluY2lkZW50U3RhdGVDb2xvcnMKICAgICAgICAgICAgPyAkSW5jaWRlbnRTdGF0ZUNvbG9ycy0+eyAkQ29uZmlnSXRlbS0+e0N1ckluY2lTdGF0ZX0gfSB8fCAiIzU1MjI0NCIKICAgICAgICAgICAgOiAkUGFyYW17QmFja2VuZERlZn17TGluZUNvbG9yfSB8fCAiIzU1MjI0NCI7CiAgICAgICAgcHVzaCBAeyAkTGluZXN7V2VpZ2h0fSB9LCAkUGFyYW17QmFja2VuZERlZn17TGluZVdpZHRofSB8fCA1OwogICAgICAgIHB1c2ggQHsgJExpbmVze0xpbmt9IH0sCiAgICAgICAgICAgICggJFBhcmFte0JhY2tlbmREZWZ9e0xpbmtTZWxmfSAmJiAkUGFyYW17VXNlcklEfSApCiAgICAgICAgICAgID8gIkFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9JENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9IgogICAgICAgICAgICA6ICcnOwoKICAgIH0KCiAgICByZXR1cm4gKAogICAgICAgIEZyb20gID0+ICRGcm9tLAogICAgICAgIFRvICAgID0+ICRUbywKICAgICAgICBJY29ucyA9PiBcJUljb25zLAogICAgICAgIExpbmVzID0+IFwlTGluZXMsCiAgICApOwoKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVE9CTyBwcm9qZWN0IChMPGh0dHBzOi8vb3RvYm8ub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=</File>
        <File Location="Kernel/System/OpenStreetMap/Location.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhdGlvbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhdGlvbiAtIEJhY2tlbmQgZm9yIElUU01Db25maWdJdGVtOjpMb2NhdGlvbiBjbGFzc2VzIGNvbnRhaW5pbmcgR1BTTG9uZ2l0dWRlIGFuZCBHUFNMYXRpdHVkZQoKPWhlYWQxIERFU0NSSVBUSU9OCgpGdW5jdGlvbnMgdG8gZ2VuZXJhdGUgdGhlIG1hcCBzZWN0aW9uIGFuZCBpY29uIGxvY2F0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHksIGluc3RlYWQgdXNlOgoKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6OkxvY2F0aW9uJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdhdGhlckluZm8oKQoKR2F0aGVycyBsb2NhdGlvbiBhbmQgaWNvbiBpbmZvLgoKICAgIG15ICVJbmZvID0gJEJhY2tlbmRPYmplY3QtPkdhdGhlckluZm8oCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdMb2NhdGlvbl9DbGFzcycsCiAgICAgICAgQmFja2VuZERlZiAgID0+ICRCYWNrZW5kRGVmLAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWw6IG9ubHkgY29uc2lkZXIgQ29uZmlnSXRlbUlEIDEyMywgaW5zdGVhZCBvZiB3aG9sZSBjbGFzcwogICAgKTsKCj1jdXQKCnN1YiBHYXRoZXJJbmZvIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBmb3IgbmVlZGVkIGRhdGEKICAgIGZvciBteSAkTmVlZGVkIChxdy9CYWNrZW5kRGVmIENsYXNzLykgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCiAgICBteSBAQ0lzOwogICAgaWYgKCAkUGFyYW17Q29uZmlnSXRlbUlEfSApIHsKICAgICAgICBwdXNoIEBDSXMsICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwogICAgICAgIG15ICVDbGFzc1RvSUQgICAgICAgICAgICA9IHJldmVyc2UgJXsgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCggQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJyApIH07CgogICAgICAgIHB1c2ggQENJcywgQHsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1SZXN1bHRMaXN0KAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NUb0lEeyAkUGFyYW17Q2xhc3N9IH0sCiAgICAgICAgICAgICkKICAgICAgICB9OwogICAgfQoKICAgIG15ICRJY29uT2JqZWN0OwogICAgaWYgKCAkUGFyYW17QmFja2VuZERlZn17SWNvbk92ZXJyaWRlfSApIHsKICAgICAgICBteSAkT3ZlcnJpZGVDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ09wZW5TdHJlZXRNYXA6Okljb25PdmVycmlkZScpLT57ICRQYXJhbXtCYWNrZW5kRGVmfXtJY29uT3ZlcnJpZGV9IH07CgogICAgICAgICMgbG9hZCB0aGUgbW9kdWxlCiAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSggJE92ZXJyaWRlQ29uZmlnLT57TW9kdWxlfSApICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgbG9hZCB0aGUgb3ZlcnJpZGUgbW9kdWxlICRPdmVycmlkZUNvbmZpZy0+e01vZHVsZX0hIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBuZXcgaW5zdGFuY2UKICAgICAgICAkSWNvbk9iamVjdCA9ICRPdmVycmlkZUNvbmZpZy0+e01vZHVsZX0tPm5ldygKICAgICAgICAgICAgJXskT3ZlcnJpZGVDb25maWd9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgKCAkRnJvbSwgJFRvLCAlSWNvbnMgKTsKICAgIENJOgogICAgZm9yIG15ICRDb25maWdJdGVtIChAQ0lzKSB7CgogICAgICAgIG15ICRWZXJzaW9uID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgICAgIFZlcnNpb25JRCA9PiAkQ29uZmlnSXRlbS0+e0xhc3RWZXJzaW9uSUR9LAogICAgICAgICk7CgogICAgICAgIG15ICRMYXRpdHVkZSAgPSAkVmVyc2lvbi0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufS0+WzFdLT57R1BTTGF0aXR1ZGV9LT5bMV0tPntDb250ZW50fSAgfHwgdW5kZWY7CiAgICAgICAgbXkgJExvbmdpdHVkZSA9ICRWZXJzaW9uLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259LT5bMV0tPntHUFNMb25naXR1ZGV9LT5bMV0tPntDb250ZW50fSB8fCB1bmRlZjsKCiAgICAgICAgaWYgKCAhZGVmaW5lZCAkTGF0aXR1ZGUgfHwgIWRlZmluZWQgJExvbmdpdHVkZSApIHsKICAgICAgICAgICAgbmV4dCBDSTsKICAgICAgICB9CgogICAgICAgICMgZGVmaW5lIGNvb3JkaW5hdGVzCiAgICAgICAgaWYgKCAhJEZyb20gKSB7CiAgICAgICAgICAgICRGcm9tID0gWyAkTGF0aXR1ZGUsICRMb25naXR1ZGUgXTsKICAgICAgICAgICAgJFRvICAgPSBbICRMYXRpdHVkZSwgJExvbmdpdHVkZSBdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCAkRnJvbS0+WzBdID4gJExhdGl0dWRlICkgIHsgJEZyb20tPlswXSA9ICRMYXRpdHVkZSB9CiAgICAgICAgICAgIGlmICggJEZyb20tPlsxXSA+ICRMb25naXR1ZGUgKSB7ICRGcm9tLT5bMV0gPSAkTG9uZ2l0dWRlIH0KICAgICAgICAgICAgaWYgKCAkVG8tPlswXSA8ICRMYXRpdHVkZSApICAgIHsgJFRvLT5bMF0gICA9ICRMYXRpdHVkZSB9CiAgICAgICAgICAgIGlmICggJFRvLT5bMV0gPCAkTG9uZ2l0dWRlICkgICB7ICRUby0+WzFdICAgPSAkTG9uZ2l0dWRlIH0KICAgICAgICB9CgogICAgICAgIG15ICRJY29uID0gJFBhcmFte0JhY2tlbmREZWZ9e0ljb25QYXRofTsKICAgICAgICBpZiAoICRQYXJhbXtCYWNrZW5kRGVmfXtJY29uT3ZlcnJpZGV9ICkgewogICAgICAgICAgICBteSAkT3ZlcnJpZGVJY29uID0gJEljb25PYmplY3QtPkdldEljb24oCiAgICAgICAgICAgICAgICBWZXJzaW9uID0+ICRWZXJzaW9uLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRPdmVycmlkZUljb24pIHsKICAgICAgICAgICAgICAgICRJY29uID0gJE92ZXJyaWRlSWNvbjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBwbGFjZSBJY29uIChMaW5rU2VsZiBvbmx5IGZvciBhZ2VudHMpCiAgICAgICAgaWYgKCRJY29uKSB7CiAgICAgICAgICAgIHB1c2ggQHsgJEljb25ze1BhdGh9IH0sICAgICAgJEljb247CiAgICAgICAgICAgIHB1c2ggQHsgJEljb25ze0xhdGl0dWRlfSB9LCAgJExhdGl0dWRlOwogICAgICAgICAgICBwdXNoIEB7ICRJY29uc3tMb25naXR1ZGV9IH0sICRMb25naXR1ZGU7CiAgICAgICAgICAgIHB1c2ggQHsgJEljb25ze0xpbmt9IH0sCiAgICAgICAgICAgICAgICAoICRQYXJhbXtCYWNrZW5kRGVmfXtMaW5rU2VsZn0gJiYgJFBhcmFte1VzZXJJRH0gKQogICAgICAgICAgICAgICAgPyAiQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0iCiAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgICAgICBwdXNoIEB7ICRJY29uc3tUb29sdGlwfSB9LAogICAgICAgICAgICAgICAgKCAkUGFyYW17QmFja2VuZERlZn17VG9vbHRpcH0gKQogICAgICAgICAgICAgICAgPyAkVmVyc2lvbi0+e05hbWV9CiAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gKAogICAgICAgIEZyb20gID0+ICRGcm9tLAogICAgICAgIFRvICAgID0+ICRUbywKICAgICAgICBJY29ucyA9PiBcJUljb25zLAogICAgKTsKCn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RPQk8gcHJvamVjdCAoTDxodHRwczovL290b2JvLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK</File>
        <File Location="Kernel/System/OpenStreetMap/Icons/BasicCIInfo.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpJY29uczo6QmFzaWNDSUluZm87Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6Okljb25zOjpCYXNpY0NJSW5mbwoKPWhlYWQxIERFU0NSSVBUSU9OCgpEZWZpbmVzIHdoaWNoIGljb25zIHRvIHVzZSwgYmFzZWQgb24gc3RhdGVzLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdC4KCiAgICBteSAkSWNvbk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpJY29uczo6QmFzaWNDSUluZm8tPm5ldygKICAgICAgICAlUGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSBcJVBhcmFtOwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdldEljb24oKQoKUmV0dXJucyB0aGUgaWNvbiBwYXRoIGluZm8uCgogICAgbXkgJEljb25QYXRoID0gJEljb25PYmplY3QtPkdldEljb24oCiAgICAgICAgVmVyc2lvbiA9PiAkVmVyc2lvbiwKICAgICk7Cgo9Y3V0CgpzdWIgR2V0SWNvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvVmVyc2lvbi8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIFNUQVRFOgogICAgZm9yIG15ICROYW1lICgga2V5cyAleyAkU2VsZi0+e1N0YXRlc30gfSApIHsKICAgICAgICBmb3IgbXkgJEF0dHIgKCBrZXlzICV7ICRTZWxmLT57U3RhdGVzfXskTmFtZX0gfSApIHsKICAgICAgICAgICAgaWYgKCAhJFBhcmFte1ZlcnNpb259eyRBdHRyfSB8fCAkUGFyYW17VmVyc2lvbn17JEF0dHJ9IG5lICRTZWxmLT57U3RhdGVzfXskTmFtZX17JEF0dHJ9ICkgewogICAgICAgICAgICAgICAgbmV4dCBTVEFURTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB3ZSBmdWxsZmlsbCBhbGwgcmVxdWlyZW1lbnRzIGhlcmUKICAgICAgICByZXR1cm4gJFNlbGYtPntJY29uUGF0aHN9eyROYW1lfSBpZiAkU2VsZi0+e0ljb25QYXRoc317JE5hbWV9OwogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/System/OpenStreetMap.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyR3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXAKCj1oZWFkMSBERVNDUklQVElPTgoKRnVuY3Rpb25zIHRvIGdlbmVyYXRlIHRoZSBtYXAgc2VjdGlvbiBhbmQgaWNvbiBsb2NhdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0LiBEbyBub3QgdXNlIGl0IGRpcmVjdGx5LCBpbnN0ZWFkIHVzZToKCiAgICBteSAkT1NNT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXAnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgR2VuZXJhdGVSZXNwb25zZSgpCgpHZW5lcmF0ZXMgdGhlIFJlc3BvbnNlIGNvbnRhaW5pbmcgYWxsIHRoZSBpbmZvLgoKICAgIG15ICRSZXNwb25zZSA9ICRPU01PYmplY3QtPkdlbmVyYXRlUmVzcG9uc2UoCiAgICAgICAgT3JpZ2luYWxBY3Rpb24gPT4gQWN0aW9uLAogICAgKTsKCj1jdXQKCnN1YiBHZW5lcmF0ZVJlc3BvbnNlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFJldHVybkVyciA9IFsKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0Zyb20nLAogICAgICAgICAgICBEYXRhID0+IFsgLTEwLCAtMTAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnVG8nLAogICAgICAgICAgICBEYXRhID0+IFsgMTAsIDEwIF0sCiAgICAgICAgfSwKICAgIF07CgogICAgIyBjaGVjayBmb3IgbmVlZGVkIGRhdGEKICAgIGlmICggIWRlZmluZWQgJFBhcmFte09yaWdpbmFsQWN0aW9ufSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgT3JpZ2luYWxBY3Rpb24hJywKICAgICAgICApOwogICAgICAgIHJldHVybiAkUmV0dXJuRXJyOwogICAgfQoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IHRoZSB0ZW1wbGF0ZXMgZm9yIGFsbCBhY3Rpb25zCiAgICBteSAkVGVtcGxhdGVzID0gJENvbmZpZ09iamVjdC0+R2V0KCdPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWcnKTsKICAgIGlmICggISRUZW1wbGF0ZXMgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTm8gQWN0aW9uQ29uZmlncyBmb3VuZCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRSZXR1cm5FcnI7CiAgICB9CgogICAgaWYgKCAkUGFyYW17T3JpZ2luYWxBY3Rpb259IGVxICdDb21tb25BY3Rpb24nICkgewogICAgICAgICRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gPSAkUGFyYW17VXNlcklEfSA/ICggJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6Q29tbW9uUGFyYW0nKS0+eydBY3Rpb24nfSB8fCAnQ29tbW9uQWN0aW9uJyApIDoKICAgICAgICAgICAgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0N1c3RvbWVyRnJvbnRlbmQ6OkNvbW1vblBhcmFtJyktPnsnQWN0aW9uJ30gfHwgJ0N1c3RvbWVyQ29tbW9uQWN0aW9uJyApOwogICAgfQoKICAgICMgZ2V0IHRoZSBtYXAgY29uZmlnIGZvciB0aGUgY3VycmVudCBhY3Rpb24KICAgIG15ICRNYXBDb25maWc7CiAgICBURU1QTEFURToKICAgIGZvciBteSAkQ3VyckNvbmYgKCB2YWx1ZXMgJXskVGVtcGxhdGVzfSApIHsKICAgICAgICBpZiAoICRDdXJyQ29uZi0+e0FjdGlvbn0gZXEgJFBhcmFte09yaWdpbmFsQWN0aW9ufSApIHsKICAgICAgICAgICAgJE1hcENvbmZpZyA9ICRDdXJyQ29uZjsKICAgICAgICAgICAgbGFzdCBURU1QTEFURTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhJE1hcENvbmZpZyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBBY3Rpb25Db25maWcgZm91bmQgZm9yICRQYXJhbXtPcmlnaW5hbEFjdGlvbn0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybiAkUmV0dXJuRXJyOwogICAgfQoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwogICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CiAgICBteSAkQ3VzdG9tZXJHcm91cE9iamVjdCAgPSAoICRQYXJhbXtDdXN0b21lclVzZXJJRH0gJiYgJENvbmZpZ09iamVjdC0+R2V0KCdDdXN0b21lckdyb3VwU3VwcG9ydCcpICkgPyAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJHcm91cCcpIDogdW5kZWY7CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJUNsYXNzSURzOwogICAgewogICAgICAgIG15ICRDbGFzc0xpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICk7CiAgICAgICAgJUNsYXNzSURzID0gcmV2ZXJzZSAleyRDbGFzc0xpc3R9OwogICAgfQoKICAgICMgZ2V0IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGNsYXNzIGJhY2tlbmRzCiAgICBteSAlQmFja2VuZERlZiA9IG1hcCB7ICRfLT57Q2xhc3N9ID0+ICRfIH0gdmFsdWVzICV7ICRDb25maWdPYmplY3QtPkdldCgnT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcnKSB9OwoKICAgIG15ICggJFJldHVybiwgJUljb25zLCAlTGluZXMgKTsKICAgIENBVEVHT1JZOgogICAgZm9yIG15ICRDYXRlZ29yeSAoIEB7ICRNYXBDb25maWctPntTaG93fSB9ICkgewogICAgICAgIG15ICVEYXRhOwogICAgICAgIGlmICggJENhdGVnb3J5IGVxICdTZWxmJyApIHsKICAgICAgICAgICAgJURhdGEgPSAkU2VsZi0+X0NsYXNzR2V0KAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgQmFja2VuZERlZiA9PiBcJUJhY2tlbmREZWYsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkRGF0YXtDbGFzc30gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFJldHVybkVycjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBBZGQgQ29uZmlnSXRlbUlEIG9yIHNpbWlsYXIKICAgICAgICAgICAgJURhdGEgPSAoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICVEYXRhID0gKAogICAgICAgICAgICAgICAgQ2xhc3MgICA9PiAkQ2F0ZWdvcnksCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lEc3skQ2F0ZWdvcnl9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGl0ZW1zIG9ubHkgaWYgdXNlciBoYXMgYWNjZXNzIHJpZ2h0cwogICAgICAgIG15ICRIYXNBY2Nlc3M7CgogICAgICAgICMgYWdlbnRzCiAgICAgICAgaWYgKCAkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAgICAgJEhhc0FjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgU2NvcGUgICA9PiAnQ2xhc3MnLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkRGF0YXtDbGFzc0lEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdybycsCiAgICAgICAgICAgICAgICBMb2dObyAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGN1c3RvbWVyIHVzZXJzIHdpdGggZ3JvdXAgc3VwcG9ydAogICAgICAgIGVsc2lmICgkQ3VzdG9tZXJHcm91cE9iamVjdCkgewogICAgICAgICAgICBteSAkQ2xhc3NJdGVtID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICAgICAgSXRlbUlEID0+ICREYXRhe0NsYXNzSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgdXNlciBncm91cHMKICAgICAgICAgICAgbXkgQEdyb3VwSURzID0gJEN1c3RvbWVyR3JvdXBPYmplY3QtPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICAgICAgVHlwZSAgID0+ICdybycsCiAgICAgICAgICAgICAgICBSZXN1bHQgPT4gJ0lEJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgbG9va2luZyBmb3IgZ3JvdXAgaWQKICAgICAgICAgICAgR1JPVVA6CiAgICAgICAgICAgIGZvciBteSAkR3JvdXBJRCAoQEdyb3VwSURzKSB7CiAgICAgICAgICAgICAgICBpZiAoICRDbGFzc0l0ZW0tPntQZXJtaXNzaW9ufSAmJiAkR3JvdXBJRCBlcSAkQ2xhc3NJdGVtLT57UGVybWlzc2lvbn0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEhhc0FjY2VzcyA9IDE7CiAgICAgICAgICAgICAgICAgICAgbGFzdCBHUk9VUDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjdXN0b21lciB1c2VycyB3aXRob3V0IGdyb3VwIHN1cHBvcnQgKHNob3cgZXZlcnl0aGluZyB3aGljaCBpcyBjb25maWd1cmVkKQogICAgICAgIGVsc2lmICggJFBhcmFte0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAgICAgJEhhc0FjY2VzcyA9IDE7CiAgICAgICAgfQoKICAgICAgICBuZXh0IENBVEVHT1JZIGlmICEkSGFzQWNjZXNzOwoKICAgICAgICBpZiAoICEkQmFja2VuZERlZnsgJERhdGF7Q2xhc3N9IH17QmFja2VuZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBCYWNrZW5kIGRlZmluZWQgZm9yICREYXRhe0NsYXNzfSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gJFJldHVybkVycjsKICAgICAgICB9CgogICAgICAgIG15ICVJbmZvID0gJEtlcm5lbDo6T00tPkdldCggJEJhY2tlbmREZWZ7ICREYXRhe0NsYXNzfSB9e0JhY2tlbmR9ICktPkdhdGhlckluZm8oCiAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICBCYWNrZW5kRGVmID0+ICRCYWNrZW5kRGVmeyAkRGF0YXtDbGFzc30gfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSAvLyB1bmRlZiwKICAgICAgICApOwoKICAgICAgICAjIEFkanVzdCBtYXAgY3V0b3V0CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUmV0dXJuICYmICVJbmZvICkgewogICAgICAgICAgICAkUmV0dXJuID0gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEluZm97RnJvbX0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnRnJvbScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEluZm97VG99LAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RvJywKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCVJbmZvKSB7CiAgICAgICAgICAgIGlmICggJEluZm97RnJvbX1bMF0gPCAkUmV0dXJuLT5bMF0tPntEYXRhfS0+WzBdICkgeyAkUmV0dXJuLT5bMF0tPntEYXRhfS0+WzBdID0gJEluZm97RnJvbX1bMF0gfQogICAgICAgICAgICBpZiAoICRJbmZve0Zyb219WzFdIDwgJFJldHVybi0+WzBdLT57RGF0YX0tPlsxXSApIHsgJFJldHVybi0+WzBdLT57RGF0YX0tPlsxXSA9ICRJbmZve0Zyb219WzFdIH0KICAgICAgICAgICAgaWYgKCAkSW5mb3tUb31bMF0gPiAkUmV0dXJuLT5bMV0tPntEYXRhfS0+WzBdICkgICB7ICRSZXR1cm4tPlsxXS0+e0RhdGF9LT5bMF0gPSAkSW5mb3tUb31bMF0gfQogICAgICAgICAgICBpZiAoICRJbmZve1RvfVsxXSA+ICRSZXR1cm4tPlsxXS0+e0RhdGF9LT5bMV0gKSAgIHsgJFJldHVybi0+WzFdLT57RGF0YX0tPlsxXSA9ICRJbmZve1RvfVsxXSB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBuZXh0IENBVEVHT1JZOwogICAgICAgIH0KCiAgICAgICAgIyBnYXRoZXIgaWNvbiBpbmZvCiAgICAgICAgaWYgKCAkSW5mb3tJY29uc30gKSB7CiAgICAgICAgICAgIGlmICggJEluZm97SWNvbnN9e0xhdGl0dWRlfSAmJiAkSW5mb3tJY29uc317TG9uZ2l0dWRlfSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkS2V5IChxdy9MYXRpdHVkZSBMb25naXR1ZGUgUGF0aCBMaW5rIFRvb2x0aXAvKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRJbmZve0ljb25zfXskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRpICggMCAuLiAkI3sgJEluZm97SWNvbnN9e0xhdGl0dWRlfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkSWNvbnN7JEtleX0gfSwgJEluZm97SWNvbnN9eyRLZXl9WyRpXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRpICggMCAuLiAkI3sgJEluZm97SWNvbnN9e0xhdGl0dWRlfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkSWNvbnN7JEtleX0gfSwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2F0aGVyIGxpbmUgaW5mbwogICAgICAgIGlmICggJEluZm97TGluZXN9ICkgewogICAgICAgICAgICBpZiAoICRJbmZve0xpbmVzfXtGcm9tMH0gKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAocXcvRnJvbTAgVG8wIEZyb20xIFRvMSBDb2xvciBMaW5rIFRvb2x0aXAgV2VpZ2h0LykgewogICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCAkSW5mb3tMaW5lc317JEtleX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkaSAoIDAgLi4gJCN7ICRJbmZve0xpbmVzfXtGcm9tMH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJExpbmVzeyRLZXl9IH0sICRJbmZve0xpbmVzfXskS2V5fVskaV07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkaSAoIDAgLi4gJCN7ICRJbmZve0xpbmVzfXtGcm9tMH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJExpbmVzeyRLZXl9IH0sICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICggIWRlZmluZWQgJFJldHVybiApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIG1hcCBkYXRhIHByb3ZpZGVkISAoICRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gKSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJFJldHVybkVycjsKICAgIH0KCiAgICAjIGlmIG5vIGNvb3JkaW5hdGVzIHdoZXJlIHByb3ZpZGVkCiAgICBmb3IgbXkgJGkgKCAwLCAxICkgewogICAgICAgIGZvciBteSAkaiAoIDAsIDEgKSB7CiAgICAgICAgICAgICRSZXR1cm4tPlskaV0tPntEYXRhfS0+WyRqXSAvLz0gMDsKICAgICAgICB9CiAgICB9CgogICAgIyBtYXJnaW4gaXMgZWl0aGVyIGEgZnJhY3Rpb24gb2YgdGhlIG1hcCBjdXRvdXQsIG9yLCBpZiBpdCBpcyB0byBzbWFsbCwgdGhlIHByZWRlZmluZWQgbWFyZ2luCiAgICBteSAkTWFyZ2luID0gKAogICAgICAgIHNvcnQgeyAkYSA8PT4gJGIgfSAoCiAgICAgICAgICAgICRNYXBDb25maWctPntNYXJnaW59LAogICAgICAgICAgICAwLjA4ICogKCAkUmV0dXJuLT5bMF0tPntEYXRhfS0+WzFdIC0gJFJldHVybi0+WzBdLT57RGF0YX0tPlswXSApLAogICAgICAgICAgICAwLjA4ICogKCAkUmV0dXJuLT5bMV0tPntEYXRhfS0+WzFdIC0gJFJldHVybi0+WzFdLT57RGF0YX0tPlswXSApCiAgICAgICAgKQogICAgKVstMV07CgogICAgJFJldHVybi0+WzBdLT57RGF0YX0tPlswXSAtPSAkTWFyZ2luOwogICAgJFJldHVybi0+WzBdLT57RGF0YX0tPlsxXSAtPSAkTWFyZ2luOwogICAgJFJldHVybi0+WzFdLT57RGF0YX0tPlswXSArPSAkTWFyZ2luOwogICAgJFJldHVybi0+WzFdLT57RGF0YX0tPlsxXSArPSAkTWFyZ2luOwoKICAgIGlmICglSWNvbnMpIHsKICAgICAgICBwdXNoIEB7JFJldHVybn0sIHsKICAgICAgICAgICAgTmFtZSA9PiAnSWNvbnMnLAogICAgICAgICAgICBEYXRhID0+IFwlSWNvbnMsCiAgICAgICAgfTsKICAgIH0KICAgIGlmICglTGluZXMpIHsKICAgICAgICBwdXNoIEB7JFJldHVybn0sIHsKICAgICAgICAgICAgTmFtZSA9PiAnTGluZXMnLAogICAgICAgICAgICBEYXRhID0+IFwlTGluZXMsCiAgICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gJFJldHVybjsKCn0KCj1oZWFkMiBfQ2xhc3NHZXQoKQoKUHJvdmlkZXMgdGhlIGNsYXNzIGluIGRlcGVuZGVuY2Ugb2YgdGhlIHNpdGUgdmlzaXRlZC4KCiAgICBteSAoICRDbGFzc0lELCAkQ2xhc3MgKSA9ICRPU01PYmplY3QtPl9DbGFzc0dldCgKICAgICAgICBPcmlnaW5hbEFjdGlvbiA9PiAnQWN0aW9uJywKICAgICAgICAlR2V0UGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIF9DbGFzc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvT3JpZ2luYWxBY3Rpb24gQmFja2VuZERlZi8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJFBhcmFte09yaWdpbmFsQWN0aW9ufSBlcSAnQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20nICkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENvbmZpZ0l0ZW1JRCEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBteSAkQ0kgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRQYXJhbXtCYWNrZW5kRGVmfXsgJENJLT57Q2xhc3N9IH0gKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENJLT57Q2xhc3NJRH0sCiAgICAgICAgICAgIENsYXNzICAgPT4gJENJLT57Q2xhc3N9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuOwoKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVE9CTyBwcm9qZWN0IChMPGh0dHBzOi8vb3RvYm8ub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKCj1jdXQK</File>
        <File Location="Kernel/Modules/AgentOpenStreetMap.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50T3BlblN0cmVldE1hcDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG9iamVjdHMKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwoKICAgIGZvciBteSAkQXR0cmlidXRlICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbU5hbWVzKCkgKSB7CiAgICAgICAgJEdldFBhcmFteyRBdHRyaWJ1dGV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJEF0dHJpYnV0ZSApOwogICAgfQoKICAgICMgQUpBWCBmdW5jdGlvbiBjYWxsCiAgICBpZiAoICRHZXRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gKSB7CgogICAgICAgICMgZ2V0IGljb24gYW5kIGxvY2F0aW9uIGluZm8KICAgICAgICBteSAkT1NNT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXAnKTsKCiAgICAgICAgbXkgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbkpTT04oCiAgICAgICAgICAgICRPU01PYmplY3QtPkdlbmVyYXRlUmVzcG9uc2UoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgbW9kdWxlIHBhZ2UKICAgIGVsc2UgewoKICAgICAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuLCB1c2VkIGZvciBiYWNrbGlua3MKICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5WaWV3JywKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ09wZW5TdHJlZXRNYXAnKSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudE9wZW5TdHJlZXRNYXAnLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwoKICAgIH0KCn0KCjE7Cg==</File>
        <File Location="Kernel/Modules/CustomerOpenStreetMap.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkN1c3RvbWVyT3BlblN0cmVldE1hcDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG9iamVjdHMKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwoKICAgIGZvciBteSAkQXR0cmlidXRlICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbU5hbWVzKCkgKSB7CiAgICAgICAgJEdldFBhcmFteyRBdHRyaWJ1dGV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJEF0dHJpYnV0ZSApOwogICAgfQoKICAgICMgQUpBWCBmdW5jdGlvbiBjYWxsCiAgICBpZiAoICRHZXRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gKSB7CgogICAgICAgICMgZ2V0IGljb24gYW5kIGxvY2F0aW9uIGluZm8KICAgICAgICBteSAkT1NNT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXAnKTsKCiAgICAgICAgbXkgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbkpTT04oCiAgICAgICAgICAgICRPU01PYmplY3QtPkdlbmVyYXRlUmVzcG9uc2UoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAwLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgbW9kdWxlIHBhZ2UKICAgIGVsc2UgewoKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJIZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdDdXN0b21lck9wZW5TdHJlZXRNYXAnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgPT4gJFNlbGYtPntNb2R1bGVSZWd9e1RpdGxlfSB8fCAnTWFwJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJOYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKCiAgICB9Cgp9CgoxOwo=</File>
        <File Location="var/httpd/htdocs/js/Core.OpenStreetMap.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uZGUvCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CgpDb3JlLk9wZW5TdHJlZXRNYXAgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgdmFyIENhbnZhc0lEID0gJ29wZW5zdHJlZXRtYXAtY2FudmFzJzsKCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIGlmICggJCggIiMiICsgQ2FudmFzSUQgKS5sZW5ndGggPiAwICkgewogICAgICAgICAgICBUYXJnZXROUy5DcmVhdGVNYXAoKTsKICAgICAgICB9CiAgICB9OwoKICAgIFRhcmdldE5TLkNyZWF0ZU1hcCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyBDU1MgbGFkZW4KICAgICAgICBUYXJnZXROUy5Mb2FkQ1NTKCIvb3RvYm8td2ViL3NraW5zL0FnZW50L2RlZmF1bHQvY3NzL3RoaXJkcGFydHkvbGVhZmxldC0xLjQuMC9sZWFmbGV0LmNzcyIpOwoKICAgICAgICAvLyBMZWFmbGV0c2NyaXB0IGxhZGVuCiAgICAgICAgVGFyZ2V0TlMuTG9hZFNjcmlwdCgiL290b2JvLXdlYi9qcy90aGlyZHBhcnR5L2xlYWZsZXQtMS40LjAvbGVhZmxldC5qcyIsIFRhcmdldE5TLk1hcFNjcmlwdCk7CiAgICB9OwoKICAgIFRhcmdldE5TLk1hcFNjcmlwdCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgdmFyIG1hcGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICIjIiArIENhbnZhc0lEICk7CiAgICAgICAgbWFwY2FudmFzLmlubmVySFRNTCA9ICIiOwoKICAgICAgICAvLyBLYXJ0ZW4gYW5sZWdlbgoKICAgICAgICB2YXIgb3NtID0gTC50aWxlTGF5ZXIoJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywgewogICAgICAgICAgICBtYXhab29tOiAyMCwKICAgICAgICAgICAgYXR0cmlidXRpb246ICdNYXAgZGF0YSAmY29weTsgPGEgaHJlZj0iaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+T3BlblN0cmVldE1hcDwvYT4gYW5kIGNvbnRyaWJ1dG9ycyA8YSBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wLyIgdGFyZ2V0PSJfYmxhbmsiPkNDLUJZLVNBPC9hPicKICAgICAgICB9KTsKCiAgICAgICAgICAgIHZhciBtYXAgPSBMLm1hcChtYXBjYW52YXMsIHsgbGF5ZXJzOiBvc20sIHRhcDogZmFsc2UgfSApIDsKCiAgICAgICAgLy8gTWl0IE1hw59zdGFiCgogICAgICAgICAgICBMLmNvbnRyb2wuc2NhbGUoe2ltcGVyaWFsOmZhbHNlfSkuYWRkVG8obWFwKTsKCiAgICAgICAgLy9LYXJ0ZW5hdXNzY2huaXR0IHfDpGhsZW4KICAgICAgICB2YXIgRGF0YSA9IHt9OwoKICAgICAgICAvLyBnYXRoZXIgaW5mbyBmcm9tIHVybCAobmVlZCBDb25maWdJdGVtSUQpCiAgICAgICAgdmFyIGhhc2g7CiAgICAgICAgdmFyIGhhc2hlcyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNsaWNlKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJz8nKSArIDEpLnNwbGl0KCc7Jyk7CiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGhhc2hlcy5sZW5ndGg7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGhhc2ggPSBoYXNoZXNbaV0uc3BsaXQoJz0nKTsKICAgICAgICAgICAgRGF0YVtoYXNoWzBdXSA9IGhhc2hbMV07CiAgICAgICAgfQoKICAgICAgICAvLyBzdG9yZSB0aGUgb3JpZ2luYWwgYWN0aW9uCiAgICAgICAgaWYgKCBEYXRhWydBY3Rpb24nXSAhPSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgIERhdGFbJ09yaWdpbmFsQWN0aW9uJ10gPSBEYXRhWydBY3Rpb24nXTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIChDdXN0b21lcilGcm9udGVuZDo6Q29tbW9uUGFyYW0jIyNBY3Rpb24KICAgICAgICAgICAgRGF0YVsnT3JpZ2luYWxBY3Rpb24nXSA9ICdDb21tb25BY3Rpb24nOwogICAgICAgIH0KCiAgICAgICAgLy8gdXNlIGFnZW50IG9yIGN1c3RvbWVyIGludGVyZmFjZQogICAgICAgIGlmICggQ29yZS5Db25maWcuR2V0KCdTZXNzaW9uTmFtZScpID09PSBDb3JlLkNvbmZpZy5HZXQoJ0N1c3RvbWVyUGFuZWxTZXNzaW9uTmFtZScpICkgewogICAgICAgICAgICBEYXRhWydBY3Rpb24nXSA9ICdDdXN0b21lck9wZW5TdHJlZXRNYXAnOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgRGF0YVsnQWN0aW9uJ10gPSAnQWdlbnRPcGVuU3RyZWV0TWFwJzsKICAgICAgICB9CgogICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpLCBEYXRhLCBmdW5jdGlvbihSZXNwb25zZSl7CgogICAgICAgICAgICB2YXIgYm91bmRzID0gWyBbIFJlc3BvbnNlWydGcm9tJ11bMF1bMF0sIFJlc3BvbnNlWydGcm9tJ11bMV1bMF0gXSwgWyBSZXNwb25zZVsnVG8nXVswXVswXSwgUmVzcG9uc2VbJ1RvJ11bMV1bMF0gXSBdOwoKICAgICAgICAgICAgLy8gbGluayBmdW5jdGlvbiBjcmVhdG9yIHRvIGhhdmUgY29uc3RhbnQgVXJscyBmb3Igb2xkIGJyb3dzZXJzLCB0b28KICAgICAgICAgICAgZnVuY3Rpb24gR2V0TGlua09wZW5lciggVXJsICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKCBVcmwsICJfc2VsZiIgKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHBsYWNlIGljb25zCiAgICAgICAgICAgIGlmICggUmVzcG9uc2VbJ0ljb25zJ10gKSB7CiAgICAgICAgICAgICAgICB2YXIgSWNvbnMgPSB7fTsKCiAgICAgICAgICAgICAgICAvLyBtYXAgdGhlIHVub3JkZXJlZCBSZXNwb25zZSBhcnJheSB0byBhbiBhdHRyaWJ1dGUgaGFzaAogICAgICAgICAgICAgICAgUmVzcG9uc2VbJ0ljb25zJ10ubWFwKGZ1bmN0aW9uKG4peyBJY29uc1sgblswXSBdID0gblsxXSB9KTsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEljb25zWydMYXRpdHVkZSddLmxlbmd0aCA7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciBJY29uOwogICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0byBtYXAKICAgICAgICAgICAgICAgICAgICBpZiAoIEljb25zWydQYXRoJ11baV0gPT0gJycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEljb24gPSBMLm1hcmtlcihbSWNvbnNbJ0xhdGl0dWRlJ11baV0sIEljb25zWydMb25naXR1ZGUnXVtpXV0pLmFkZFRvKG1hcCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgTG9nbyA9IEwuaWNvbih7IGljb25Vcmw6IEljb25zWydQYXRoJ11baV0sIGljb25TaXplOiBbMTAsIDE1XSwgaWNvbkFuY2hvcjogWzUsIDE1XSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgSWNvbiA9IEwubWFya2VyKFtJY29uc1snTGF0aXR1ZGUnXVtpXSwgSWNvbnNbJ0xvbmdpdHVkZSddW2ldXSwge2ljb246IExvZ299KTsKICAgICAgICAgICAgICAgICAgICAgICAgSWNvbi5hZGRUbyhtYXApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy8gbGluawogICAgICAgICAgICAgICAgICAgIGlmICggSWNvbnNbJ0xpbmsnXVtpXSAhPSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE9wZW5VcmwgPSBHZXRMaW5rT3BlbmVyKCBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJykrSWNvbnNbJ0xpbmsnXVtpXSApOwogICAgICAgICAgICAgICAgICAgICAgICBJY29uLm9uKCAiY2xpY2siLCBPcGVuVXJsICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyB0b29sdGlwCiAgICAgICAgICAgICAgICAgICAgaWYgKCBJY29uc1snVG9vbHRpcCddICYmIEljb25zWydUb29sdGlwJ11baV0gIT0gJycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEljb24uYmluZFRvb2x0aXAoIEljb25zWydUb29sdGlwJ11baV0gKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGRyYXcgbGluZXMKICAgICAgICAgICAgaWYgKCBSZXNwb25zZVsnTGluZXMnXSApIHsKICAgICAgICAgICAgICAgIC8vIG1hcCB0aGUgdW5vcmRlcmVkIFJlc3BvbnNlIGFycmF5IHRvIGFuIGF0dHJpYnV0ZSBoYXNoCiAgICAgICAgICAgICAgICB2YXIgTGluZXMgPSB7fTsKICAgICAgICAgICAgICAgIFJlc3BvbnNlWydMaW5lcyddLm1hcChmdW5jdGlvbihuKXsgTGluZXNbIG5bMF0gXSA9IG5bMV0gfSk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IExpbmVzWydGcm9tMCddLmxlbmd0aCA7IGkrKykgewoKICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdG8gbWFwCiAgICAgICAgICAgICAgICAgICAgdmFyIExpbmUgPSBMLnBvbHlsaW5lKFsgW0xpbmVzWydGcm9tMCddW2ldLCBMaW5lc1snRnJvbTEnXVtpXV0sIFtMaW5lc1snVG8wJ11baV0sIExpbmVzWydUbzEnXVtpXV0gXSwge2NvbG9yOiBMaW5lc1snQ29sb3InXVtpXSwgd2VpZ2h0OiBMaW5lc1snV2VpZ2h0J11baV0sIG9wYWNpdHk6IDF9ICk7CiAgICAgICAgICAgICAgICAgICAgTGluZS5hZGRUbyhtYXApOwoKICAgICAgICAgICAgICAgICAgICAvLyBsaW5rCiAgICAgICAgICAgICAgICAgICAgaWYgKCBMaW5lc1snTGluayddW2ldICE9ICcnICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgT3BlblVybCA9IEdldExpbmtPcGVuZXIoIENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKStMaW5lc1snTGluayddW2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAgIExpbmUub24oICJjbGljayIsIE9wZW5VcmwgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIHRvb2x0aXAKICAgICAgICAgICAgICAgICAgICBpZiAoIEljb25zWydUb29sdGlwJ10gJiYgSWNvbnNbJ1Rvb2x0aXAnXVtpXSAhPSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgSWNvbi5iaW5kVG9vbHRpcCggSWNvbnNbJ1Rvb2x0aXAnXVtpXSApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHNjYWxlIG1hcAogICAgICAgICAgICAgICAgbWFwLmZpdEJvdW5kcyggYm91bmRzICk7CgogICAgICAgICAgICAvLyBLYXJ0ZSBiZWkgcmVzaXplIG5ldSBza2FsaWVyZW4KICAgICAgICAgICAgICAgIG1hcC5vbigicmVzaXplIiwgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgICAgICAgICAgbWFwLmZpdEJvdW5kcyggYm91bmRzICk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgfSk7CgogICAgfTsKCiAgICBUYXJnZXROUy5Mb2FkU2NyaXB0ID0gZnVuY3Rpb24gKHVybCxjYWxsYmFjaykgewogICAgICAgIHZhciBzY3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzY3IudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOwogICAgICAgIHNjci5hc3luYyA9ICJhc3luYyI7CiAgICAgICAgaWYodHlwZW9mKGNhbGxiYWNrKT09ImZ1bmN0aW9uIikgewogICAgICAgICAgICBzY3Iub25sb2FkRG9uZSA9IGZhbHNlOwogICAgICAgICAgICBzY3Iub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoICFzY3Iub25sb2FkRG9uZSApIHsKICAgICAgICAgICAgICAgICAgICBzY3Iub25sb2FkRG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgc2NyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKCAoICJsb2FkZWQiID09PSBzY3IucmVhZHlTdGF0ZSB8fCAiY29tcGxldGUiID09PSBzY3IucmVhZHlTdGF0ZSApICYmICFzY3Iub25sb2FkRG9uZSApIHsKICAgICAgICAgICAgICAgICAgICBzY3Iub25sb2FkRG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzY3Iuc3JjID0gdXJsOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc2NyKTsKICAgIH07IC8vIExvYWRTY3JpcHQKCiAgICBUYXJnZXROUy5Mb2FkQ1NTID0gZnVuY3Rpb24gKHVybCkgewogICAgICAgIHZhciBsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOwogICAgICAgIGwudHlwZSA9ICJ0ZXh0L2NzcyI7CiAgICAgICAgbC5yZWwgPSAic3R5bGVzaGVldCI7CiAgICAgICAgbC5ocmVmID0gdXJsOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQobCk7CiAgICB9OyAvLyBMb2FkQ1NTCgogICAgQ29yZS5Jbml0LlJlZ2lzdGVyTmFtZXNwYWNlKFRhcmdldE5TLCAnQVBQX01PRFVMRScpOwoKICAgIHJldHVybiBUYXJnZXROUzsKCn0oQ29yZS5PcGVuU3RyZWV0TWFwIHx8IHt9KSk7Cg==</File>
        <File Location="var/httpd/htdocs/js/thirdparty/leaflet-1.4.0/leaflet.js" Permission="660" Encode="Base64">LyogQHByZXNlcnZlCiAqIExlYWZsZXQgMS40LjAsIGEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cDovL2xlYWZsZXRqcy5jb20KICogKGMpIDIwMTAtMjAxOCBWbGFkaW1pciBBZ2Fmb25raW4sIChjKSAyMDEwLTIwMTEgQ2xvdWRNYWRlCiAqLwohZnVuY3Rpb24odCxpKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP2koZXhwb3J0cyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0saSk6aSh0Lkw9e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe3ZhciBpLGUsbixvO2ZvcihlPTEsbj1hcmd1bWVudHMubGVuZ3RoO2U8bjtlKyspe289YXJndW1lbnRzW2VdO2ZvcihpIGluIG8pdFtpXT1vW2ldfXJldHVybiB0fWZ1bmN0aW9uIGUodCxpKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2U7aWYodC5iaW5kKXJldHVybiB0LmJpbmQuYXBwbHkodCxlLmNhbGwoYXJndW1lbnRzLDEpKTt2YXIgbj1lLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGksbi5sZW5ndGg/bi5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cykpOmFyZ3VtZW50cyl9fWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQuX2xlYWZsZXRfaWQ9dC5fbGVhZmxldF9pZHx8KytlaSx0Ll9sZWFmbGV0X2lkfWZ1bmN0aW9uIG8odCxpLGUpe3ZhciBuLG8scyxyO3JldHVybiByPWZ1bmN0aW9uKCl7bj0hMSxvJiYocy5hcHBseShlLG8pLG89ITEpfSxzPWZ1bmN0aW9uKCl7bj9vPWFyZ3VtZW50czoodC5hcHBseShlLGFyZ3VtZW50cyksc2V0VGltZW91dChyLGkpLG49ITApfX1mdW5jdGlvbiBzKHQsaSxlKXt2YXIgbj1pWzFdLG89aVswXSxzPW4tbztyZXR1cm4gdD09PW4mJmU/dDooKHQtbyklcytzKSVzK299ZnVuY3Rpb24gcigpe3JldHVybiExfWZ1bmN0aW9uIGEodCxpKXt2YXIgZT1NYXRoLnBvdygxMCx2b2lkIDA9PT1pPzY6aSk7cmV0dXJuIE1hdGgucm91bmQodCplKS9lfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiB1KHQpe3JldHVybiBoKHQpLnNwbGl0KC9ccysvKX1mdW5jdGlvbiBsKHQsaSl7dC5oYXNPd25Qcm9wZXJ0eSgib3B0aW9ucyIpfHwodC5vcHRpb25zPXQub3B0aW9ucz9paSh0Lm9wdGlvbnMpOnt9KTtmb3IodmFyIGUgaW4gaSl0Lm9wdGlvbnNbZV09aVtlXTtyZXR1cm4gdC5vcHRpb25zfWZ1bmN0aW9uIGModCxpLGUpe3ZhciBuPVtdO2Zvcih2YXIgbyBpbiB0KW4ucHVzaChlbmNvZGVVUklDb21wb25lbnQoZT9vLnRvVXBwZXJDYXNlKCk6bykrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0W29dKSk7cmV0dXJuKGkmJi0xIT09aS5pbmRleE9mKCI/Iik/IiYiOiI/Iikrbi5qb2luKCImIil9ZnVuY3Rpb24gXyh0LGkpe3JldHVybiB0LnJlcGxhY2UobmksZnVuY3Rpb24odCxlKXt2YXIgbj1pW2VdO2lmKHZvaWQgMD09PW4pdGhyb3cgbmV3IEVycm9yKCJObyB2YWx1ZSBwcm92aWRlZCBmb3IgdmFyaWFibGUgIit0KTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmKG49bihpKSksbn0pfWZ1bmN0aW9uIGQodCxpKXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdPT09aSlyZXR1cm4gZTtyZXR1cm4tMX1mdW5jdGlvbiBwKHQpe3JldHVybiB3aW5kb3dbIndlYmtpdCIrdF18fHdpbmRvd1sibW96Iit0XXx8d2luZG93WyJtcyIrdF19ZnVuY3Rpb24gbSh0KXt2YXIgaT0rbmV3IERhdGUsZT1NYXRoLm1heCgwLDE2LShpLXJpKSk7cmV0dXJuIHJpPWkrZSx3aW5kb3cuc2V0VGltZW91dCh0LGUpfWZ1bmN0aW9uIGYodCxpLG4pe2lmKCFufHxhaSE9PW0pcmV0dXJuIGFpLmNhbGwod2luZG93LGUodCxpKSk7dC5jYWxsKGkpfWZ1bmN0aW9uIGcodCl7dCYmaGkuY2FsbCh3aW5kb3csdCl9ZnVuY3Rpb24gdigpe31mdW5jdGlvbiB5KHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgTCYmTCYmTC5NaXhpbil7dD1vaSh0KT90Olt0XTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl0W2ldPT09TC5NaXhpbi5FdmVudHMmJmNvbnNvbGUud2FybigiRGVwcmVjYXRlZCBpbmNsdWRlIG9mIEwuTWl4aW4uRXZlbnRzOiB0aGlzIHByb3BlcnR5IHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgcmVsZWFzZXMsIHBsZWFzZSBpbmhlcml0IGZyb20gTC5FdmVudGVkIGluc3RlYWQuIiwobmV3IEVycm9yKS5zdGFjayl9fWZ1bmN0aW9uIHgodCxpLGUpe3RoaXMueD1lP01hdGgucm91bmQodCk6dCx0aGlzLnk9ZT9NYXRoLnJvdW5kKGkpOml9ZnVuY3Rpb24gdyh0LGksZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiB4P3Q6b2kodCk/bmV3IHgodFswXSx0WzFdKTp2b2lkIDA9PT10fHxudWxsPT09dD90OiJvYmplY3QiPT10eXBlb2YgdCYmIngiaW4gdCYmInkiaW4gdD9uZXcgeCh0LngsdC55KTpuZXcgeCh0LGksZSl9ZnVuY3Rpb24gUCh0LGkpe2lmKHQpZm9yKHZhciBlPWk/W3QsaV06dCxuPTAsbz1lLmxlbmd0aDtuPG87bisrKXRoaXMuZXh0ZW5kKGVbbl0pfWZ1bmN0aW9uIGIodCxpKXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIFA/dDpuZXcgUCh0LGkpfWZ1bmN0aW9uIFQodCxpKXtpZih0KWZvcih2YXIgZT1pP1t0LGldOnQsbj0wLG89ZS5sZW5ndGg7bjxvO24rKyl0aGlzLmV4dGVuZChlW25dKX1mdW5jdGlvbiB6KHQsaSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBUP3Q6bmV3IFQodCxpKX1mdW5jdGlvbiBNKHQsaSxlKXtpZihpc05hTih0KXx8aXNOYU4oaSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgiK3QrIiwgIitpKyIpIik7dGhpcy5sYXQ9K3QsdGhpcy5sbmc9K2ksdm9pZCAwIT09ZSYmKHRoaXMuYWx0PStlKX1mdW5jdGlvbiBDKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIE0/dDpvaSh0KSYmIm9iamVjdCIhPXR5cGVvZiB0WzBdPzM9PT10Lmxlbmd0aD9uZXcgTSh0WzBdLHRbMV0sdFsyXSk6Mj09PXQubGVuZ3RoP25ldyBNKHRbMF0sdFsxXSk6bnVsbDp2b2lkIDA9PT10fHxudWxsPT09dD90OiJvYmplY3QiPT10eXBlb2YgdCYmImxhdCJpbiB0P25ldyBNKHQubGF0LCJsbmciaW4gdD90LmxuZzp0Lmxvbix0LmFsdCk6dm9pZCAwPT09aT9udWxsOm5ldyBNKHQsaSxlKX1mdW5jdGlvbiBTKHQsaSxlLG4pe2lmKG9pKHQpKXJldHVybiB0aGlzLl9hPXRbMF0sdGhpcy5fYj10WzFdLHRoaXMuX2M9dFsyXSx2b2lkKHRoaXMuX2Q9dFszXSk7dGhpcy5fYT10LHRoaXMuX2I9aSx0aGlzLl9jPWUsdGhpcy5fZD1ufWZ1bmN0aW9uIFoodCxpLGUsbil7cmV0dXJuIG5ldyBTKHQsaSxlLG4pfWZ1bmN0aW9uIEUodCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHQpfWZ1bmN0aW9uIGsodCxpKXt2YXIgZSxuLG8scyxyLGEsaD0iIjtmb3IoZT0wLG89dC5sZW5ndGg7ZTxvO2UrKyl7Zm9yKG49MCxzPShyPXRbZV0pLmxlbmd0aDtuPHM7bisrKWE9cltuXSxoKz0obj8iTCI6Ik0iKSthLngrIiAiK2EueTtoKz1pP0ppPyJ6IjoieCI6IiJ9cmV0dXJuIGh8fCJNMCAwIn1mdW5jdGlvbiBCKHQpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT49MH1mdW5jdGlvbiBBKHQsaSxlLG4pe3JldHVybiJ0b3VjaHN0YXJ0Ij09PWk/Tyh0LGUsbik6InRvdWNobW92ZSI9PT1pP1codCxlLG4pOiJ0b3VjaGVuZCI9PT1pJiZIKHQsZSxuKSx0aGlzfWZ1bmN0aW9uIEkodCxpLGUpe3ZhciBuPXRbIl9sZWFmbGV0XyIraStlXTtyZXR1cm4idG91Y2hzdGFydCI9PT1pP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcih0ZSxuLCExKToidG91Y2htb3ZlIj09PWk/dC5yZW1vdmVFdmVudExpc3RlbmVyKGllLG4sITEpOiJ0b3VjaGVuZCI9PT1pJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKGVlLG4sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuZSxuLCExKSksdGhpc31mdW5jdGlvbiBPKHQsaSxuKXt2YXIgbz1lKGZ1bmN0aW9uKHQpe2lmKCJtb3VzZSIhPT10LnBvaW50ZXJUeXBlJiZ0Lk1TUE9JTlRFUl9UWVBFX01PVVNFJiZ0LnBvaW50ZXJUeXBlIT09dC5NU1BPSU5URVJfVFlQRV9NT1VTRSl7aWYoIShvZS5pbmRleE9mKHQudGFyZ2V0LnRhZ05hbWUpPDApKXJldHVybjtQdCh0KX1qKHQsaSl9KTt0WyJfbGVhZmxldF90b3VjaHN0YXJ0IituXT1vLHQuYWRkRXZlbnRMaXN0ZW5lcih0ZSxvLCExKSxyZXx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRlLFIsITApLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGllLE4sITApLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGVlLEQsITApLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKG5lLEQsITApLHJlPSEwKX1mdW5jdGlvbiBSKHQpe3NlW3QucG9pbnRlcklkXT10LGFlKyt9ZnVuY3Rpb24gTih0KXtzZVt0LnBvaW50ZXJJZF0mJihzZVt0LnBvaW50ZXJJZF09dCl9ZnVuY3Rpb24gRCh0KXtkZWxldGUgc2VbdC5wb2ludGVySWRdLGFlLS19ZnVuY3Rpb24gaih0LGkpe3QudG91Y2hlcz1bXTtmb3IodmFyIGUgaW4gc2UpdC50b3VjaGVzLnB1c2goc2VbZV0pO3QuY2hhbmdlZFRvdWNoZXM9W3RdLGkodCl9ZnVuY3Rpb24gVyh0LGksZSl7dmFyIG49ZnVuY3Rpb24odCl7KHQucG9pbnRlclR5cGUhPT10Lk1TUE9JTlRFUl9UWVBFX01PVVNFJiYibW91c2UiIT09dC5wb2ludGVyVHlwZXx8MCE9PXQuYnV0dG9ucykmJmoodCxpKX07dFsiX2xlYWZsZXRfdG91Y2htb3ZlIitlXT1uLHQuYWRkRXZlbnRMaXN0ZW5lcihpZSxuLCExKX1mdW5jdGlvbiBIKHQsaSxlKXt2YXIgbj1mdW5jdGlvbih0KXtqKHQsaSl9O3RbIl9sZWFmbGV0X3RvdWNoZW5kIitlXT1uLHQuYWRkRXZlbnRMaXN0ZW5lcihlZSxuLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIobmUsbiwhMSl9ZnVuY3Rpb24gRih0LGksZSl7ZnVuY3Rpb24gbih0KXt2YXIgaTtpZihWaSl7aWYoIWJpfHwibW91c2UiPT09dC5wb2ludGVyVHlwZSlyZXR1cm47aT1hZX1lbHNlIGk9dC50b3VjaGVzLmxlbmd0aDtpZighKGk+MSkpe3ZhciBlPURhdGUubm93KCksbj1lLShzfHxlKTtyPXQudG91Y2hlcz90LnRvdWNoZXNbMF06dCxhPW4+MCYmbjw9aCxzPWV9fWZ1bmN0aW9uIG8odCl7aWYoYSYmIXIuY2FuY2VsQnViYmxlKXtpZihWaSl7aWYoIWJpfHwibW91c2UiPT09dC5wb2ludGVyVHlwZSlyZXR1cm47dmFyIGUsbixvPXt9O2ZvcihuIGluIHIpZT1yW25dLG9bbl09ZSYmZS5iaW5kP2UuYmluZChyKTplO3I9b31yLnR5cGU9ImRibGNsaWNrIixpKHIpLHM9bnVsbH19dmFyIHMscixhPSExLGg9MjUwO3JldHVybiB0W2xlK2hlK2VdPW4sdFtsZSt1ZStlXT1vLHRbbGUrImRibGNsaWNrIitlXT1pLHQuYWRkRXZlbnRMaXN0ZW5lcihoZSxuLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIodWUsbywhMSksdC5hZGRFdmVudExpc3RlbmVyKCJkYmxjbGljayIsaSwhMSksdGhpc31mdW5jdGlvbiBVKHQsaSl7dmFyIGU9dFtsZStoZStpXSxuPXRbbGUrdWUraV0sbz10W2xlKyJkYmxjbGljayIraV07cmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihoZSxlLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIodWUsbiwhMSksYml8fHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLG8sITEpLHRoaXN9ZnVuY3Rpb24gVih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk6dH1mdW5jdGlvbiBxKHQsaSl7dmFyIGU9dC5zdHlsZVtpXXx8dC5jdXJyZW50U3R5bGUmJnQuY3VycmVudFN0eWxlW2ldO2lmKCghZXx8ImF1dG8iPT09ZSkmJmRvY3VtZW50LmRlZmF1bHRWaWV3KXt2YXIgbj1kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCk7ZT1uP25baV06bnVsbH1yZXR1cm4iYXV0byI9PT1lP251bGw6ZX1mdW5jdGlvbiBHKHQsaSxlKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO3JldHVybiBuLmNsYXNzTmFtZT1pfHwiIixlJiZlLmFwcGVuZENoaWxkKG4pLG59ZnVuY3Rpb24gSyh0KXt2YXIgaT10LnBhcmVudE5vZGU7aSYmaS5yZW1vdmVDaGlsZCh0KX1mdW5jdGlvbiBZKHQpe2Zvcig7dC5maXJzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gWCh0KXt2YXIgaT10LnBhcmVudE5vZGU7aSYmaS5sYXN0Q2hpbGQhPT10JiZpLmFwcGVuZENoaWxkKHQpfWZ1bmN0aW9uIEoodCl7dmFyIGk9dC5wYXJlbnROb2RlO2kmJmkuZmlyc3RDaGlsZCE9PXQmJmkuaW5zZXJ0QmVmb3JlKHQsaS5maXJzdENoaWxkKX1mdW5jdGlvbiAkKHQsaSl7aWYodm9pZCAwIT09dC5jbGFzc0xpc3QpcmV0dXJuIHQuY2xhc3NMaXN0LmNvbnRhaW5zKGkpO3ZhciBlPWV0KHQpO3JldHVybiBlLmxlbmd0aD4wJiZuZXcgUmVnRXhwKCIoXnxcXHMpIitpKyIoXFxzfCQpIikudGVzdChlKX1mdW5jdGlvbiBRKHQsaSl7aWYodm9pZCAwIT09dC5jbGFzc0xpc3QpZm9yKHZhciBlPXUoaSksbj0wLG89ZS5sZW5ndGg7bjxvO24rKyl0LmNsYXNzTGlzdC5hZGQoZVtuXSk7ZWxzZSBpZighJCh0LGkpKXt2YXIgcz1ldCh0KTtpdCh0LChzP3MrIiAiOiIiKStpKX19ZnVuY3Rpb24gdHQodCxpKXt2b2lkIDAhPT10LmNsYXNzTGlzdD90LmNsYXNzTGlzdC5yZW1vdmUoaSk6aXQodCxoKCgiICIrZXQodCkrIiAiKS5yZXBsYWNlKCIgIitpKyIgIiwiICIpKSl9ZnVuY3Rpb24gaXQodCxpKXt2b2lkIDA9PT10LmNsYXNzTmFtZS5iYXNlVmFsP3QuY2xhc3NOYW1lPWk6dC5jbGFzc05hbWUuYmFzZVZhbD1pfWZ1bmN0aW9uIGV0KHQpe3JldHVybiB0LmNvcnJlc3BvbmRpbmdFbGVtZW50JiYodD10LmNvcnJlc3BvbmRpbmdFbGVtZW50KSx2b2lkIDA9PT10LmNsYXNzTmFtZS5iYXNlVmFsP3QuY2xhc3NOYW1lOnQuY2xhc3NOYW1lLmJhc2VWYWx9ZnVuY3Rpb24gbnQodCxpKXsib3BhY2l0eSJpbiB0LnN0eWxlP3Quc3R5bGUub3BhY2l0eT1pOiJmaWx0ZXIiaW4gdC5zdHlsZSYmb3QodCxpKX1mdW5jdGlvbiBvdCh0LGkpe3ZhciBlPSExLG49IkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhIjt0cnl7ZT10LmZpbHRlcnMuaXRlbShuKX1jYXRjaCh0KXtpZigxPT09aSlyZXR1cm59aT1NYXRoLnJvdW5kKDEwMCppKSxlPyhlLkVuYWJsZWQ9MTAwIT09aSxlLk9wYWNpdHk9aSk6dC5zdHlsZS5maWx0ZXIrPSIgcHJvZ2lkOiIrbisiKG9wYWNpdHk9IitpKyIpIn1mdW5jdGlvbiBzdCh0KXtmb3IodmFyIGk9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdaW4gaSlyZXR1cm4gdFtlXTtyZXR1cm4hMX1mdW5jdGlvbiBydCh0LGksZSl7dmFyIG49aXx8bmV3IHgoMCwwKTt0LnN0eWxlW2NlXT0oUmk/InRyYW5zbGF0ZSgiK24ueCsicHgsIituLnkrInB4KSI6InRyYW5zbGF0ZTNkKCIrbi54KyJweCwiK24ueSsicHgsMCkiKSsoZT8iIHNjYWxlKCIrZSsiKSI6IiIpfWZ1bmN0aW9uIGF0KHQsaSl7dC5fbGVhZmxldF9wb3M9aSxqaT9ydCh0LGkpOih0LnN0eWxlLmxlZnQ9aS54KyJweCIsdC5zdHlsZS50b3A9aS55KyJweCIpfWZ1bmN0aW9uIGh0KHQpe3JldHVybiB0Ll9sZWFmbGV0X3Bvc3x8bmV3IHgoMCwwKX1mdW5jdGlvbiB1dCgpe210KHdpbmRvdywiZHJhZ3N0YXJ0IixQdCl9ZnVuY3Rpb24gbHQoKXtmdCh3aW5kb3csImRyYWdzdGFydCIsUHQpfWZ1bmN0aW9uIGN0KHQpe2Zvcig7LTE9PT10LnRhYkluZGV4Oyl0PXQucGFyZW50Tm9kZTt0LnN0eWxlJiYoX3QoKSxtZT10LGZlPXQuc3R5bGUub3V0bGluZSx0LnN0eWxlLm91dGxpbmU9Im5vbmUiLG10KHdpbmRvdywia2V5ZG93biIsX3QpKX1mdW5jdGlvbiBfdCgpe21lJiYobWUuc3R5bGUub3V0bGluZT1mZSxtZT12b2lkIDAsZmU9dm9pZCAwLGZ0KHdpbmRvdywia2V5ZG93biIsX3QpKX1mdW5jdGlvbiBkdCh0KXtkb3t0PXQucGFyZW50Tm9kZX13aGlsZSghKHQub2Zmc2V0V2lkdGgmJnQub2Zmc2V0SGVpZ2h0fHx0PT09ZG9jdW1lbnQuYm9keSkpO3JldHVybiB0fWZ1bmN0aW9uIHB0KHQpe3ZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3g6aS53aWR0aC90Lm9mZnNldFdpZHRofHwxLHk6aS5oZWlnaHQvdC5vZmZzZXRIZWlnaHR8fDEsYm91bmRpbmdDbGllbnRSZWN0Oml9fWZ1bmN0aW9uIG10KHQsaSxlLG4pe2lmKCJvYmplY3QiPT10eXBlb2YgaSlmb3IodmFyIG8gaW4gaSlndCh0LG8saVtvXSxlKTtlbHNlIGZvcih2YXIgcz0wLHI9KGk9dShpKSkubGVuZ3RoO3M8cjtzKyspZ3QodCxpW3NdLGUsbik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZnQodCxpLGUsbil7aWYoIm9iamVjdCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKXZ0KHQsbyxpW29dLGUpO2Vsc2UgaWYoaSlmb3IodmFyIHM9MCxyPShpPXUoaSkpLmxlbmd0aDtzPHI7cysrKXZ0KHQsaVtzXSxlLG4pO2Vsc2V7Zm9yKHZhciBhIGluIHRbeWVdKXZ0KHQsYSx0W3llXVthXSk7ZGVsZXRlIHRbeWVdfXJldHVybiB0aGlzfWZ1bmN0aW9uIGd0KHQsaSxlLG8pe3ZhciBzPWkrbihlKSsobz8iXyIrbihvKToiIik7aWYodFt5ZV0mJnRbeWVdW3NdKXJldHVybiB0aGlzO3ZhciByPWZ1bmN0aW9uKGkpe3JldHVybiBlLmNhbGwob3x8dCxpfHx3aW5kb3cuZXZlbnQpfSxhPXI7VmkmJjA9PT1pLmluZGV4T2YoInRvdWNoIik/QSh0LGkscixzKTohcWl8fCJkYmxjbGljayIhPT1pfHwhRnx8VmkmJkVpPyJhZGRFdmVudExpc3RlbmVyImluIHQ/Im1vdXNld2hlZWwiPT09aT90LmFkZEV2ZW50TGlzdGVuZXIoIm9ud2hlZWwiaW4gdD8id2hlZWwiOiJtb3VzZXdoZWVsIixyLCExKToibW91c2VlbnRlciI9PT1pfHwibW91c2VsZWF2ZSI9PT1pPyhyPWZ1bmN0aW9uKGkpe2k9aXx8d2luZG93LmV2ZW50LEN0KHQsaSkmJmEoaSl9LHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciI9PT1pPyJtb3VzZW92ZXIiOiJtb3VzZW91dCIsciwhMSkpOigiY2xpY2siPT09aSYmemkmJihyPWZ1bmN0aW9uKHQpe1N0KHQsYSl9KSx0LmFkZEV2ZW50TGlzdGVuZXIoaSxyLCExKSk6ImF0dGFjaEV2ZW50ImluIHQmJnQuYXR0YWNoRXZlbnQoIm9uIitpLHIpOkYodCxyLHMpLHRbeWVdPXRbeWVdfHx7fSx0W3llXVtzXT1yfWZ1bmN0aW9uIHZ0KHQsaSxlLG8pe3ZhciBzPWkrbihlKSsobz8iXyIrbihvKToiIikscj10W3llXSYmdFt5ZV1bc107aWYoIXIpcmV0dXJuIHRoaXM7VmkmJjA9PT1pLmluZGV4T2YoInRvdWNoIik/SSh0LGkscyk6IXFpfHwiZGJsY2xpY2siIT09aXx8IVV8fFZpJiZFaT8icmVtb3ZlRXZlbnRMaXN0ZW5lciJpbiB0PyJtb3VzZXdoZWVsIj09PWk/dC5yZW1vdmVFdmVudExpc3RlbmVyKCJvbndoZWVsImluIHQ/IndoZWVsIjoibW91c2V3aGVlbCIsciwhMSk6dC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIj09PWk/Im1vdXNlb3ZlciI6Im1vdXNlbGVhdmUiPT09aT8ibW91c2VvdXQiOmksciwhMSk6ImRldGFjaEV2ZW50ImluIHQmJnQuZGV0YWNoRXZlbnQoIm9uIitpLHIpOlUodCxzKSx0W3llXVtzXT1udWxsfWZ1bmN0aW9uIHl0KHQpe3JldHVybiB0LnN0b3BQcm9wYWdhdGlvbj90LnN0b3BQcm9wYWdhdGlvbigpOnQub3JpZ2luYWxFdmVudD90Lm9yaWdpbmFsRXZlbnQuX3N0b3BwZWQ9ITA6dC5jYW5jZWxCdWJibGU9ITAsTXQodCksdGhpc31mdW5jdGlvbiB4dCh0KXtyZXR1cm4gZ3QodCwibW91c2V3aGVlbCIseXQpLHRoaXN9ZnVuY3Rpb24gd3QodCl7cmV0dXJuIG10KHQsIm1vdXNlZG93biB0b3VjaHN0YXJ0IGRibGNsaWNrIix5dCksZ3QodCwiY2xpY2siLHp0KSx0aGlzfWZ1bmN0aW9uIFB0KHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExLHRoaXN9ZnVuY3Rpb24gTHQodCl7cmV0dXJuIFB0KHQpLHl0KHQpLHRoaXN9ZnVuY3Rpb24gYnQodCxpKXtpZighaSlyZXR1cm4gbmV3IHgodC5jbGllbnRYLHQuY2xpZW50WSk7dmFyIGU9cHQoaSksbj1lLmJvdW5kaW5nQ2xpZW50UmVjdDtyZXR1cm4gbmV3IHgoKHQuY2xpZW50WC1uLmxlZnQpL2UueC1pLmNsaWVudExlZnQsKHQuY2xpZW50WS1uLnRvcCkvZS55LWkuY2xpZW50VG9wKX1mdW5jdGlvbiBUdCh0KXtyZXR1cm4gYmk/dC53aGVlbERlbHRhWS8yOnQuZGVsdGFZJiYwPT09dC5kZWx0YU1vZGU/LXQuZGVsdGFZL3hlOnQuZGVsdGFZJiYxPT09dC5kZWx0YU1vZGU/MjAqLXQuZGVsdGFZOnQuZGVsdGFZJiYyPT09dC5kZWx0YU1vZGU/NjAqLXQuZGVsdGFZOnQuZGVsdGFYfHx0LmRlbHRhWj8wOnQud2hlZWxEZWx0YT8odC53aGVlbERlbHRhWXx8dC53aGVlbERlbHRhKS8yOnQuZGV0YWlsJiZNYXRoLmFicyh0LmRldGFpbCk8MzI3NjU/MjAqLXQuZGV0YWlsOnQuZGV0YWlsP3QuZGV0YWlsLy0zMjc2NSo2MDowfWZ1bmN0aW9uIHp0KHQpe3dlW3QudHlwZV09ITB9ZnVuY3Rpb24gTXQodCl7dmFyIGk9d2VbdC50eXBlXTtyZXR1cm4gd2VbdC50eXBlXT0hMSxpfWZ1bmN0aW9uIEN0KHQsaSl7dmFyIGU9aS5yZWxhdGVkVGFyZ2V0O2lmKCFlKXJldHVybiEwO3RyeXtmb3IoO2UmJmUhPT10OyllPWUucGFyZW50Tm9kZX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4gZSE9PXR9ZnVuY3Rpb24gU3QodCxpKXt2YXIgZT10LnRpbWVTdGFtcHx8dC5vcmlnaW5hbEV2ZW50JiZ0Lm9yaWdpbmFsRXZlbnQudGltZVN0YW1wLG49Z2UmJmUtZ2U7biYmbj4xMDAmJm48NTAwfHx0LnRhcmdldC5fc2ltdWxhdGVkQ2xpY2smJiF0Ll9zaW11bGF0ZWQ/THQodCk6KGdlPWUsaSh0KSl9ZnVuY3Rpb24gWnQodCxpKXtpZighaXx8IXQubGVuZ3RoKXJldHVybiB0LnNsaWNlKCk7dmFyIGU9aSppO3JldHVybiB0PUF0KHQsZSksdD1rdCh0LGUpfWZ1bmN0aW9uIEV0KHQsaSxlKXtyZXR1cm4gTWF0aC5zcXJ0KER0KHQsaSxlLCEwKSl9ZnVuY3Rpb24ga3QodCxpKXt2YXIgZT10Lmxlbmd0aCxuPW5ldyh0eXBlb2YgVWludDhBcnJheSE9dm9pZCAwKyIiP1VpbnQ4QXJyYXk6QXJyYXkpKGUpO25bMF09bltlLTFdPTEsQnQodCxuLGksMCxlLTEpO3ZhciBvLHM9W107Zm9yKG89MDtvPGU7bysrKW5bb10mJnMucHVzaCh0W29dKTtyZXR1cm4gc31mdW5jdGlvbiBCdCh0LGksZSxuLG8pe3ZhciBzLHIsYSxoPTA7Zm9yKHI9bisxO3I8PW8tMTtyKyspKGE9RHQodFtyXSx0W25dLHRbb10sITApKT5oJiYocz1yLGg9YSk7aD5lJiYoaVtzXT0xLEJ0KHQsaSxlLG4scyksQnQodCxpLGUscyxvKSl9ZnVuY3Rpb24gQXQodCxpKXtmb3IodmFyIGU9W3RbMF1dLG49MSxvPTAscz10Lmxlbmd0aDtuPHM7bisrKU50KHRbbl0sdFtvXSk+aSYmKGUucHVzaCh0W25dKSxvPW4pO3JldHVybiBvPHMtMSYmZS5wdXNoKHRbcy0xXSksZX1mdW5jdGlvbiBJdCh0LGksZSxuLG8pe3ZhciBzLHIsYSxoPW4/a2U6UnQodCxlKSx1PVJ0KGksZSk7Zm9yKGtlPXU7Oyl7aWYoIShofHUpKXJldHVyblt0LGldO2lmKGgmdSlyZXR1cm4hMTthPVJ0KHI9T3QodCxpLHM9aHx8dSxlLG8pLGUpLHM9PT1oPyh0PXIsaD1hKTooaT1yLHU9YSl9fWZ1bmN0aW9uIE90KHQsaSxlLG4sbyl7dmFyIHMscixhPWkueC10LngsaD1pLnktdC55LHU9bi5taW4sbD1uLm1heDtyZXR1cm4gOCZlPyhzPXQueCthKihsLnktdC55KS9oLHI9bC55KTo0JmU/KHM9dC54K2EqKHUueS10LnkpL2gscj11LnkpOjImZT8ocz1sLngscj10LnkraCoobC54LXQueCkvYSk6MSZlJiYocz11Lngscj10LnkraCoodS54LXQueCkvYSksbmV3IHgocyxyLG8pfWZ1bmN0aW9uIFJ0KHQsaSl7dmFyIGU9MDtyZXR1cm4gdC54PGkubWluLng/ZXw9MTp0Lng+aS5tYXgueCYmKGV8PTIpLHQueTxpLm1pbi55P2V8PTQ6dC55PmkubWF4LnkmJihlfD04KSxlfWZ1bmN0aW9uIE50KHQsaSl7dmFyIGU9aS54LXQueCxuPWkueS10Lnk7cmV0dXJuIGUqZStuKm59ZnVuY3Rpb24gRHQodCxpLGUsbil7dmFyIG8scz1pLngscj1pLnksYT1lLngtcyxoPWUueS1yLHU9YSphK2gqaDtyZXR1cm4gdT4wJiYoKG89KCh0LngtcykqYSsodC55LXIpKmgpL3UpPjE/KHM9ZS54LHI9ZS55KTpvPjAmJihzKz1hKm8scis9aCpvKSksYT10LngtcyxoPXQueS1yLG4/YSphK2gqaDpuZXcgeChzLHIpfWZ1bmN0aW9uIGp0KHQpe3JldHVybiFvaSh0WzBdKXx8Im9iamVjdCIhPXR5cGVvZiB0WzBdWzBdJiZ2b2lkIDAhPT10WzBdWzBdfWZ1bmN0aW9uIFd0KHQpe3JldHVybiBjb25zb2xlLndhcm4oIkRlcHJlY2F0ZWQgdXNlIG9mIF9mbGF0LCBwbGVhc2UgdXNlIEwuTGluZVV0aWwuaXNGbGF0IGluc3RlYWQuIiksanQodCl9ZnVuY3Rpb24gSHQodCxpLGUpe3ZhciBuLG8scyxyLGEsaCx1LGwsYyxfPVsxLDQsMiw4XTtmb3Iobz0wLHU9dC5sZW5ndGg7bzx1O28rKyl0W29dLl9jb2RlPVJ0KHRbb10saSk7Zm9yKHI9MDtyPDQ7cisrKXtmb3IobD1fW3JdLG49W10sbz0wLHM9KHU9dC5sZW5ndGgpLTE7bzx1O3M9bysrKWE9dFtvXSxoPXRbc10sYS5fY29kZSZsP2guX2NvZGUmbHx8KChjPU90KGgsYSxsLGksZSkpLl9jb2RlPVJ0KGMsaSksbi5wdXNoKGMpKTooaC5fY29kZSZsJiYoKGM9T3QoaCxhLGwsaSxlKSkuX2NvZGU9UnQoYyxpKSxuLnB1c2goYykpLG4ucHVzaChhKSk7dD1ufXJldHVybiB0fWZ1bmN0aW9uIEZ0KHQsaSl7dmFyIGUsbixvLHMscj0iRmVhdHVyZSI9PT10LnR5cGU/dC5nZW9tZXRyeTp0LGE9cj9yLmNvb3JkaW5hdGVzOm51bGwsaD1bXSx1PWkmJmkucG9pbnRUb0xheWVyLGw9aSYmaS5jb29yZHNUb0xhdExuZ3x8VXQ7aWYoIWEmJiFyKXJldHVybiBudWxsO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOnJldHVybiBlPWwoYSksdT91KHQsZSk6bmV3ICRlKGUpO2Nhc2UiTXVsdGlQb2ludCI6Zm9yKG89MCxzPWEubGVuZ3RoO288cztvKyspZT1sKGFbb10pLGgucHVzaCh1P3UodCxlKTpuZXcgJGUoZSkpO3JldHVybiBuZXcgS2UoaCk7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIG49VnQoYSwiTGluZVN0cmluZyI9PT1yLnR5cGU/MDoxLGwpLG5ldyBubihuLGkpO2Nhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aVBvbHlnb24iOnJldHVybiBuPVZ0KGEsIlBvbHlnb24iPT09ci50eXBlPzE6MixsKSxuZXcgb24obixpKTtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6Zm9yKG89MCxzPXIuZ2VvbWV0cmllcy5sZW5ndGg7bzxzO28rKyl7dmFyIGM9RnQoe2dlb21ldHJ5OnIuZ2VvbWV0cmllc1tvXSx0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnQucHJvcGVydGllc30saSk7YyYmaC5wdXNoKGMpfXJldHVybiBuZXcgS2UoaCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgR2VvSlNPTiBvYmplY3QuIil9fWZ1bmN0aW9uIFV0KHQpe3JldHVybiBuZXcgTSh0WzFdLHRbMF0sdFsyXSl9ZnVuY3Rpb24gVnQodCxpLGUpe2Zvcih2YXIgbixvPVtdLHM9MCxyPXQubGVuZ3RoO3M8cjtzKyspbj1pP1Z0KHRbc10saS0xLGUpOihlfHxVdCkodFtzXSksby5wdXNoKG4pO3JldHVybiBvfWZ1bmN0aW9uIHF0KHQsaSl7cmV0dXJuIGk9Im51bWJlciI9PXR5cGVvZiBpP2k6Nix2b2lkIDAhPT10LmFsdD9bYSh0LmxuZyxpKSxhKHQubGF0LGkpLGEodC5hbHQsaSldOlthKHQubG5nLGkpLGEodC5sYXQsaSldfWZ1bmN0aW9uIEd0KHQsaSxlLG4pe2Zvcih2YXIgbz1bXSxzPTAscj10Lmxlbmd0aDtzPHI7cysrKW8ucHVzaChpP0d0KHRbc10saS0xLGUsbik6cXQodFtzXSxuKSk7cmV0dXJuIWkmJmUmJm8ucHVzaChvWzBdKSxvfWZ1bmN0aW9uIEt0KHQsZSl7cmV0dXJuIHQuZmVhdHVyZT9pKHt9LHQuZmVhdHVyZSx7Z2VvbWV0cnk6ZX0pOll0KGUpfWZ1bmN0aW9uIFl0KHQpe3JldHVybiJGZWF0dXJlIj09PXQudHlwZXx8IkZlYXR1cmVDb2xsZWN0aW9uIj09PXQudHlwZT90Ont0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnt9LGdlb21ldHJ5OnR9fWZ1bmN0aW9uIFh0KHQsaSl7cmV0dXJuIG5ldyBzbih0LGkpfWZ1bmN0aW9uIEp0KHQsaSl7cmV0dXJuIG5ldyBtbih0LGkpfWZ1bmN0aW9uICR0KHQpe3JldHVybiBYaT9uZXcgdm4odCk6bnVsbH1mdW5jdGlvbiBRdCh0KXtyZXR1cm4gSml8fCRpP25ldyBQbih0KTpudWxsfXZhciB0aT1PYmplY3QuZnJlZXplO09iamVjdC5mcmVlemU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3ZhciBpaT1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiB0LnByb3RvdHlwZT1pLG5ldyB0fX0oKSxlaT0wLG5pPS9ceyAqKFtcd18tXSspICpcfS9nLG9pPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9LHNpPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFEL0FDd0FBQUFBQVFBQkFBQUNBRHM9IixyaT0wLGFpPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHAoIlJlcXVlc3RBbmltYXRpb25GcmFtZSIpfHxtLGhpPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8cCgiQ2FuY2VsQW5pbWF0aW9uRnJhbWUiKXx8cCgiQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lIil8fGZ1bmN0aW9uKHQpe3dpbmRvdy5jbGVhclRpbWVvdXQodCl9LHVpPShPYmplY3QuZnJlZXplfHxPYmplY3QpKHtmcmVlemU6dGksZXh0ZW5kOmksY3JlYXRlOmlpLGJpbmQ6ZSxsYXN0SWQ6ZWksc3RhbXA6bix0aHJvdHRsZTpvLHdyYXBOdW06cyxmYWxzZUZuOnIsZm9ybWF0TnVtOmEsdHJpbTpoLHNwbGl0V29yZHM6dSxzZXRPcHRpb25zOmwsZ2V0UGFyYW1TdHJpbmc6Yyx0ZW1wbGF0ZTpfLGlzQXJyYXk6b2ksaW5kZXhPZjpkLGVtcHR5SW1hZ2VVcmw6c2kscmVxdWVzdEZuOmFpLGNhbmNlbEZuOmhpLHJlcXVlc3RBbmltRnJhbWU6ZixjYW5jZWxBbmltRnJhbWU6Z30pO3YuZXh0ZW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsaXplJiZ0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuY2FsbEluaXRIb29rcygpfSxuPWUuX19zdXBlcl9fPXRoaXMucHJvdG90eXBlLG89aWkobik7by5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlPW87Zm9yKHZhciBzIGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eShzKSYmInByb3RvdHlwZSIhPT1zJiYiX19zdXBlcl9fIiE9PXMmJihlW3NdPXRoaXNbc10pO3JldHVybiB0LnN0YXRpY3MmJihpKGUsdC5zdGF0aWNzKSxkZWxldGUgdC5zdGF0aWNzKSx0LmluY2x1ZGVzJiYoeSh0LmluY2x1ZGVzKSxpLmFwcGx5KG51bGwsW29dLmNvbmNhdCh0LmluY2x1ZGVzKSksZGVsZXRlIHQuaW5jbHVkZXMpLG8ub3B0aW9ucyYmKHQub3B0aW9ucz1pKGlpKG8ub3B0aW9ucyksdC5vcHRpb25zKSksaShvLHQpLG8uX2luaXRIb29rcz1bXSxvLmNhbGxJbml0SG9va3M9ZnVuY3Rpb24oKXtpZighdGhpcy5faW5pdEhvb2tzQ2FsbGVkKXtuLmNhbGxJbml0SG9va3MmJm4uY2FsbEluaXRIb29rcy5jYWxsKHRoaXMpLHRoaXMuX2luaXRIb29rc0NhbGxlZD0hMDtmb3IodmFyIHQ9MCxpPW8uX2luaXRIb29rcy5sZW5ndGg7dDxpO3QrKylvLl9pbml0SG9va3NbdF0uY2FsbCh0aGlzKX19LGV9LHYuaW5jbHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLnByb3RvdHlwZSx0KSx0aGlzfSx2Lm1lcmdlT3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLnByb3RvdHlwZS5vcHRpb25zLHQpLHRoaXN9LHYuYWRkSW5pdEhvb2s9ZnVuY3Rpb24odCl7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3RoaXNbdF0uYXBwbHkodGhpcyxpKX07cmV0dXJuIHRoaXMucHJvdG90eXBlLl9pbml0SG9va3M9dGhpcy5wcm90b3R5cGUuX2luaXRIb29rc3x8W10sdGhpcy5wcm90b3R5cGUuX2luaXRIb29rcy5wdXNoKGUpLHRoaXN9O3ZhciBsaT17b246ZnVuY3Rpb24odCxpLGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG4gaW4gdCl0aGlzLl9vbihuLHRbbl0saSk7ZWxzZSBmb3IodmFyIG89MCxzPSh0PXUodCkpLmxlbmd0aDtvPHM7bysrKXRoaXMuX29uKHRbb10saSxlKTtyZXR1cm4gdGhpc30sb2ZmOmZ1bmN0aW9uKHQsaSxlKXtpZih0KWlmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG4gaW4gdCl0aGlzLl9vZmYobix0W25dLGkpO2Vsc2UgZm9yKHZhciBvPTAscz0odD11KHQpKS5sZW5ndGg7bzxzO28rKyl0aGlzLl9vZmYodFtvXSxpLGUpO2Vsc2UgZGVsZXRlIHRoaXMuX2V2ZW50cztyZXR1cm4gdGhpc30sX29uOmZ1bmN0aW9uKHQsaSxlKXt0aGlzLl9ldmVudHM9dGhpcy5fZXZlbnRzfHx7fTt2YXIgbj10aGlzLl9ldmVudHNbdF07bnx8KG49W10sdGhpcy5fZXZlbnRzW3RdPW4pLGU9PT10aGlzJiYoZT12b2lkIDApO2Zvcih2YXIgbz17Zm46aSxjdHg6ZX0scz1uLHI9MCxhPXMubGVuZ3RoO3I8YTtyKyspaWYoc1tyXS5mbj09PWkmJnNbcl0uY3R4PT09ZSlyZXR1cm47cy5wdXNoKG8pfSxfb2ZmOmZ1bmN0aW9uKHQsaSxlKXt2YXIgbixvLHM7aWYodGhpcy5fZXZlbnRzJiYobj10aGlzLl9ldmVudHNbdF0pKWlmKGkpe2lmKGU9PT10aGlzJiYoZT12b2lkIDApLG4pZm9yKG89MCxzPW4ubGVuZ3RoO288cztvKyspe3ZhciBhPW5bb107aWYoYS5jdHg9PT1lJiZhLmZuPT09aSlyZXR1cm4gYS5mbj1yLHRoaXMuX2ZpcmluZ0NvdW50JiYodGhpcy5fZXZlbnRzW3RdPW49bi5zbGljZSgpKSx2b2lkIG4uc3BsaWNlKG8sMSl9fWVsc2V7Zm9yKG89MCxzPW4ubGVuZ3RoO288cztvKyspbltvXS5mbj1yO2RlbGV0ZSB0aGlzLl9ldmVudHNbdF19fSxmaXJlOmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5saXN0ZW5zKHQsbikpcmV0dXJuIHRoaXM7dmFyIG89aSh7fSxlLHt0eXBlOnQsdGFyZ2V0OnRoaXMsc291cmNlVGFyZ2V0OmUmJmUuc291cmNlVGFyZ2V0fHx0aGlzfSk7aWYodGhpcy5fZXZlbnRzKXt2YXIgcz10aGlzLl9ldmVudHNbdF07aWYocyl7dGhpcy5fZmlyaW5nQ291bnQ9dGhpcy5fZmlyaW5nQ291bnQrMXx8MTtmb3IodmFyIHI9MCxhPXMubGVuZ3RoO3I8YTtyKyspe3ZhciBoPXNbcl07aC5mbi5jYWxsKGguY3R4fHx0aGlzLG8pfXRoaXMuX2ZpcmluZ0NvdW50LS19fXJldHVybiBuJiZ0aGlzLl9wcm9wYWdhdGVFdmVudChvKSx0aGlzfSxsaXN0ZW5zOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHNbdF07aWYoZSYmZS5sZW5ndGgpcmV0dXJuITA7aWYoaSlmb3IodmFyIG4gaW4gdGhpcy5fZXZlbnRQYXJlbnRzKWlmKHRoaXMuX2V2ZW50UGFyZW50c1tuXS5saXN0ZW5zKHQsaSkpcmV0dXJuITA7cmV0dXJuITF9LG9uY2U6ZnVuY3Rpb24odCxpLG4pe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHZhciBvIGluIHQpdGhpcy5vbmNlKG8sdFtvXSxpKTtyZXR1cm4gdGhpc312YXIgcz1lKGZ1bmN0aW9uKCl7dGhpcy5vZmYodCxpLG4pLm9mZih0LHMsbil9LHRoaXMpO3JldHVybiB0aGlzLm9uKHQsaSxuKS5vbih0LHMsbil9LGFkZEV2ZW50UGFyZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ldmVudFBhcmVudHM9dGhpcy5fZXZlbnRQYXJlbnRzfHx7fSx0aGlzLl9ldmVudFBhcmVudHNbbih0KV09dCx0aGlzfSxyZW1vdmVFdmVudFBhcmVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZlbnRQYXJlbnRzJiZkZWxldGUgdGhpcy5fZXZlbnRQYXJlbnRzW24odCldLHRoaXN9LF9wcm9wYWdhdGVFdmVudDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fZXZlbnRQYXJlbnRzKXRoaXMuX2V2ZW50UGFyZW50c1tlXS5maXJlKHQudHlwZSxpKHtsYXllcjp0LnRhcmdldCxwcm9wYWdhdGVkRnJvbTp0LnRhcmdldH0sdCksITApfX07bGkuYWRkRXZlbnRMaXN0ZW5lcj1saS5vbixsaS5yZW1vdmVFdmVudExpc3RlbmVyPWxpLmNsZWFyQWxsRXZlbnRMaXN0ZW5lcnM9bGkub2ZmLGxpLmFkZE9uZVRpbWVFdmVudExpc3RlbmVyPWxpLm9uY2UsbGkuZmlyZUV2ZW50PWxpLmZpcmUsbGkuaGFzRXZlbnRMaXN0ZW5lcnM9bGkubGlzdGVuczt2YXIgY2k9di5leHRlbmQobGkpLF9pPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9O3gucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzLngsdGhpcy55KX0sYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2FkZCh3KHQpKX0sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3VidHJhY3Qodyh0KSl9LF9zdWJ0cmFjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2aWRlQnkodCl9LF9kaXZpZGVCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxtdWx0aXBseUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHRpcGx5QnkodCl9LF9tdWx0aXBseUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9LHNjYWxlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4KHRoaXMueCp0LngsdGhpcy55KnQueSl9LHVuc2NhbGVCeTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHgodGhpcy54L3QueCx0aGlzLnkvdC55KX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9LGZsb29yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZmxvb3IoKX0sX2Zsb29yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fY2VpbCgpfSxfY2VpbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9LHRydW5jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fdHJ1bmMoKX0sX3RydW5jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1faSh0aGlzLngpLHRoaXMueT1faSh0aGlzLnkpLHRoaXN9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7dmFyIGk9KHQ9dyh0KSkueC10aGlzLngsZT10LnktdGhpcy55O3JldHVybiBNYXRoLnNxcnQoaSppK2UqZSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4odD13KHQpKS54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0PXcodCksTWF0aC5hYnModC54KTw9TWF0aC5hYnModGhpcy54KSYmTWF0aC5hYnModC55KTw9TWF0aC5hYnModGhpcy55KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iUG9pbnQoIithKHRoaXMueCkrIiwgIithKHRoaXMueSkrIikifX0sUC5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXtyZXR1cm4gdD13KHQpLHRoaXMubWlufHx0aGlzLm1heD8odGhpcy5taW4ueD1NYXRoLm1pbih0LngsdGhpcy5taW4ueCksdGhpcy5tYXgueD1NYXRoLm1heCh0LngsdGhpcy5tYXgueCksdGhpcy5taW4ueT1NYXRoLm1pbih0LnksdGhpcy5taW4ueSksdGhpcy5tYXgueT1NYXRoLm1heCh0LnksdGhpcy5tYXgueSkpOih0aGlzLm1pbj10LmNsb25lKCksdGhpcy5tYXg9dC5jbG9uZSgpKSx0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4KCh0aGlzLm1pbi54K3RoaXMubWF4LngpLzIsKHRoaXMubWluLnkrdGhpcy5tYXgueSkvMix0KX0sZ2V0Qm90dG9tTGVmdDpmdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzLm1pbi54LHRoaXMubWF4LnkpfSxnZXRUb3BSaWdodDpmdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzLm1heC54LHRoaXMubWluLnkpfSxnZXRUb3BMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWlufSxnZXRCb3R0b21SaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heC5zdWJ0cmFjdCh0aGlzLm1pbil9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3ZhciBpLGU7cmV0dXJuKHQ9Im51bWJlciI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2YgeD93KHQpOmIodCkpaW5zdGFuY2VvZiBQPyhpPXQubWluLGU9dC5tYXgpOmk9ZT10LGkueD49dGhpcy5taW4ueCYmZS54PD10aGlzLm1heC54JiZpLnk+PXRoaXMubWluLnkmJmUueTw9dGhpcy5tYXgueX0saW50ZXJzZWN0czpmdW5jdGlvbih0KXt0PWIodCk7dmFyIGk9dGhpcy5taW4sZT10aGlzLm1heCxuPXQubWluLG89dC5tYXgscz1vLng+PWkueCYmbi54PD1lLngscj1vLnk+PWkueSYmbi55PD1lLnk7cmV0dXJuIHMmJnJ9LG92ZXJsYXBzOmZ1bmN0aW9uKHQpe3Q9Yih0KTt2YXIgaT10aGlzLm1pbixlPXRoaXMubWF4LG49dC5taW4sbz10Lm1heCxzPW8ueD5pLngmJm4ueDxlLngscj1vLnk+aS55JiZuLnk8ZS55O3JldHVybiBzJiZyfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5taW58fCF0aGlzLm1heCl9fSxULnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj10aGlzLl9zb3V0aFdlc3Qsbz10aGlzLl9ub3J0aEVhc3Q7aWYodCBpbnN0YW5jZW9mIE0paT10LGU9dDtlbHNle2lmKCEodCBpbnN0YW5jZW9mIFQpKXJldHVybiB0P3RoaXMuZXh0ZW5kKEModCl8fHoodCkpOnRoaXM7aWYoaT10Ll9zb3V0aFdlc3QsZT10Ll9ub3J0aEVhc3QsIWl8fCFlKXJldHVybiB0aGlzfXJldHVybiBufHxvPyhuLmxhdD1NYXRoLm1pbihpLmxhdCxuLmxhdCksbi5sbmc9TWF0aC5taW4oaS5sbmcsbi5sbmcpLG8ubGF0PU1hdGgubWF4KGUubGF0LG8ubGF0KSxvLmxuZz1NYXRoLm1heChlLmxuZyxvLmxuZykpOih0aGlzLl9zb3V0aFdlc3Q9bmV3IE0oaS5sYXQsaS5sbmcpLHRoaXMuX25vcnRoRWFzdD1uZXcgTShlLmxhdCxlLmxuZykpLHRoaXN9LHBhZDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9zb3V0aFdlc3QsZT10aGlzLl9ub3J0aEVhc3Qsbj1NYXRoLmFicyhpLmxhdC1lLmxhdCkqdCxvPU1hdGguYWJzKGkubG5nLWUubG5nKSp0O3JldHVybiBuZXcgVChuZXcgTShpLmxhdC1uLGkubG5nLW8pLG5ldyBNKGUubGF0K24sZS5sbmcrbykpfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE0oKHRoaXMuX3NvdXRoV2VzdC5sYXQrdGhpcy5fbm9ydGhFYXN0LmxhdCkvMiwodGhpcy5fc291dGhXZXN0LmxuZyt0aGlzLl9ub3J0aEVhc3QubG5nKS8yKX0sZ2V0U291dGhXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdH0sZ2V0Tm9ydGhFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdH0sZ2V0Tm9ydGhXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNKHRoaXMuZ2V0Tm9ydGgoKSx0aGlzLmdldFdlc3QoKSl9LGdldFNvdXRoRWFzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgTSh0aGlzLmdldFNvdXRoKCksdGhpcy5nZXRFYXN0KCkpfSxnZXRXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdC5sbmd9LGdldFNvdXRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdC5sYXR9LGdldEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0LmxuZ30sZ2V0Tm9ydGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0LmxhdH0sY29udGFpbnM6ZnVuY3Rpb24odCl7dD0ibnVtYmVyIj09dHlwZW9mIHRbMF18fHQgaW5zdGFuY2VvZiBNfHwibGF0ImluIHQ/Qyh0KTp6KHQpO3ZhciBpLGUsbj10aGlzLl9zb3V0aFdlc3Qsbz10aGlzLl9ub3J0aEVhc3Q7cmV0dXJuIHQgaW5zdGFuY2VvZiBUPyhpPXQuZ2V0U291dGhXZXN0KCksZT10LmdldE5vcnRoRWFzdCgpKTppPWU9dCxpLmxhdD49bi5sYXQmJmUubGF0PD1vLmxhdCYmaS5sbmc+PW4ubG5nJiZlLmxuZzw9by5sbmd9LGludGVyc2VjdHM6ZnVuY3Rpb24odCl7dD16KHQpO3ZhciBpPXRoaXMuX3NvdXRoV2VzdCxlPXRoaXMuX25vcnRoRWFzdCxuPXQuZ2V0U291dGhXZXN0KCksbz10LmdldE5vcnRoRWFzdCgpLHM9by5sYXQ+PWkubGF0JiZuLmxhdDw9ZS5sYXQscj1vLmxuZz49aS5sbmcmJm4ubG5nPD1lLmxuZztyZXR1cm4gcyYmcn0sb3ZlcmxhcHM6ZnVuY3Rpb24odCl7dD16KHQpO3ZhciBpPXRoaXMuX3NvdXRoV2VzdCxlPXRoaXMuX25vcnRoRWFzdCxuPXQuZ2V0U291dGhXZXN0KCksbz10LmdldE5vcnRoRWFzdCgpLHM9by5sYXQ+aS5sYXQmJm4ubGF0PGUubGF0LHI9by5sbmc+aS5sbmcmJm4ubG5nPGUubG5nO3JldHVybiBzJiZyfSx0b0JCb3hTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5nZXRXZXN0KCksdGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpLHRoaXMuZ2V0Tm9ydGgoKV0uam9pbigiLCIpfSxlcXVhbHM6ZnVuY3Rpb24odCxpKXtyZXR1cm4hIXQmJih0PXoodCksdGhpcy5fc291dGhXZXN0LmVxdWFscyh0LmdldFNvdXRoV2VzdCgpLGkpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCksaSkpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5fc291dGhXZXN0fHwhdGhpcy5fbm9ydGhFYXN0KX19LE0ucHJvdG90eXBlPXtlcXVhbHM6ZnVuY3Rpb24odCxpKXtyZXR1cm4hIXQmJih0PUModCksTWF0aC5tYXgoTWF0aC5hYnModGhpcy5sYXQtdC5sYXQpLE1hdGguYWJzKHRoaXMubG5nLXQubG5nKSk8PSh2b2lkIDA9PT1pPzFlLTk6aSkpfSx0b1N0cmluZzpmdW5jdGlvbih0KXtyZXR1cm4iTGF0TG5nKCIrYSh0aGlzLmxhdCx0KSsiLCAiK2EodGhpcy5sbmcsdCkrIikifSxkaXN0YW5jZVRvOmZ1bmN0aW9uKHQpe3JldHVybiBwaS5kaXN0YW5jZSh0aGlzLEModCkpfSx3cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHBpLndyYXBMYXRMbmcodGhpcyl9LHRvQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPTE4MCp0LzQwMDc1MDE3LGU9aS9NYXRoLmNvcyhNYXRoLlBJLzE4MCp0aGlzLmxhdCk7cmV0dXJuIHooW3RoaXMubGF0LWksdGhpcy5sbmctZV0sW3RoaXMubGF0K2ksdGhpcy5sbmcrZV0pfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgTSh0aGlzLmxhdCx0aGlzLmxuZyx0aGlzLmFsdCl9fTt2YXIgZGk9e2xhdExuZ1RvUG9pbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxuPXRoaXMuc2NhbGUoaSk7cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShlLG4pfSxwb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5zY2FsZShpKSxuPXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxlKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChuKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh0KX0sc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDI1NipNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0LzI1NikvTWF0aC5MTjJ9LGdldFByb2plY3RlZEJvdW5kczpmdW5jdGlvbih0KXtpZih0aGlzLmluZmluaXRlKXJldHVybiBudWxsO3ZhciBpPXRoaXMucHJvamVjdGlvbi5ib3VuZHMsZT10aGlzLnNjYWxlKHQpO3JldHVybiBuZXcgUCh0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShpLm1pbixlKSx0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShpLm1heCxlKSl9LGluZmluaXRlOiExLHdyYXBMYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy53cmFwTG5nP3ModC5sbmcsdGhpcy53cmFwTG5nLCEwKTp0LmxuZztyZXR1cm4gbmV3IE0odGhpcy53cmFwTGF0P3ModC5sYXQsdGhpcy53cmFwTGF0LCEwKTp0LmxhdCxpLHQuYWx0KX0sd3JhcExhdExuZ0JvdW5kczpmdW5jdGlvbih0KXt2YXIgaT10LmdldENlbnRlcigpLGU9dGhpcy53cmFwTGF0TG5nKGkpLG49aS5sYXQtZS5sYXQsbz1pLmxuZy1lLmxuZztpZigwPT09biYmMD09PW8pcmV0dXJuIHQ7dmFyIHM9dC5nZXRTb3V0aFdlc3QoKSxyPXQuZ2V0Tm9ydGhFYXN0KCk7cmV0dXJuIG5ldyBUKG5ldyBNKHMubGF0LW4scy5sbmctbyksbmV3IE0oci5sYXQtbixyLmxuZy1vKSl9fSxwaT1pKHt9LGRpLHt3cmFwTG5nOlstMTgwLDE4MF0sUjo2MzcxZTMsZGlzdGFuY2U6ZnVuY3Rpb24odCxpKXt2YXIgZT1NYXRoLlBJLzE4MCxuPXQubGF0KmUsbz1pLmxhdCplLHM9TWF0aC5zaW4oKGkubGF0LXQubGF0KSplLzIpLHI9TWF0aC5zaW4oKGkubG5nLXQubG5nKSplLzIpLGE9cypzK01hdGguY29zKG4pKk1hdGguY29zKG8pKnIqcixoPTIqTWF0aC5hdGFuMihNYXRoLnNxcnQoYSksTWF0aC5zcXJ0KDEtYSkpO3JldHVybiB0aGlzLlIqaH19KSxtaT17Ujo2Mzc4MTM3LE1BWF9MQVRJVFVERTo4NS4wNTExMjg3Nzk4LHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5QSS8xODAsZT10aGlzLk1BWF9MQVRJVFVERSxuPU1hdGgubWF4KE1hdGgubWluKGUsdC5sYXQpLC1lKSxvPU1hdGguc2luKG4qaSk7cmV0dXJuIG5ldyB4KHRoaXMuUip0LmxuZyppLHRoaXMuUipNYXRoLmxvZygoMStvKS8oMS1vKSkvMil9LHVucHJvamVjdDpmdW5jdGlvbih0KXt2YXIgaT0xODAvTWF0aC5QSTtyZXR1cm4gbmV3IE0oKDIqTWF0aC5hdGFuKE1hdGguZXhwKHQueS90aGlzLlIpKS1NYXRoLlBJLzIpKmksdC54KmkvdGhpcy5SKX0sYm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQ9NjM3ODEzNypNYXRoLlBJO3JldHVybiBuZXcgUChbLXQsLXRdLFt0LHRdKX0oKX07Uy5wcm90b3R5cGU9e3RyYW5zZm9ybTpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl90cmFuc2Zvcm0odC5jbG9uZSgpLGkpfSxfdHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8MSx0Lng9aSoodGhpcy5fYSp0LngrdGhpcy5fYiksdC55PWkqKHRoaXMuX2MqdC55K3RoaXMuX2QpLHR9LHVudHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8MSxuZXcgeCgodC54L2ktdGhpcy5fYikvdGhpcy5fYSwodC55L2ktdGhpcy5fZCkvdGhpcy5fYyl9fTt2YXIgZmksZ2ksdmkseWk9aSh7fSxwaSx7Y29kZToiRVBTRzozODU3Iixwcm9qZWN0aW9uOm1pLHRyYW5zZm9ybWF0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9LjUvKE1hdGguUEkqbWkuUik7cmV0dXJuIFoodCwuNSwtdCwuNSl9KCl9KSx4aT1pKHt9LHlpLHtjb2RlOiJFUFNHOjkwMDkxMyJ9KSx3aT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUsUGk9IkFjdGl2ZVhPYmplY3QiaW4gd2luZG93LExpPVBpJiYhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcixiaT0ibXNMYXVuY2hVcmkiaW4gbmF2aWdhdG9yJiYhKCJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQpLFRpPUIoIndlYmtpdCIpLHppPUIoImFuZHJvaWQiKSxNaT1CKCJhbmRyb2lkIDIiKXx8QigiYW5kcm9pZCAzIiksQ2k9cGFyc2VJbnQoL1dlYktpdFwvKFswLTldKyl8JC8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KVsxXSwxMCksU2k9emkmJkIoIkdvb2dsZSIpJiZDaTw1MzcmJiEoIkF1ZGlvTm9kZSJpbiB3aW5kb3cpLFppPSEhd2luZG93Lm9wZXJhLEVpPUIoImNocm9tZSIpLGtpPUIoImdlY2tvIikmJiFUaSYmIVppJiYhUGksQmk9IUVpJiZCKCJzYWZhcmkiKSxBaT1CKCJwaGFudG9tIiksSWk9Ik9UcmFuc2l0aW9uImluIHdpLE9pPTA9PT1uYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZigiV2luIiksUmk9UGkmJiJ0cmFuc2l0aW9uImluIHdpLE5pPSJXZWJLaXRDU1NNYXRyaXgiaW4gd2luZG93JiYibTExImluIG5ldyB3aW5kb3cuV2ViS2l0Q1NTTWF0cml4JiYhTWksRGk9Ik1velBlcnNwZWN0aXZlImluIHdpLGppPSF3aW5kb3cuTF9ESVNBQkxFXzNEJiYoUml8fE5pfHxEaSkmJiFJaSYmIUFpLFdpPSJ1bmRlZmluZWQiIT10eXBlb2Ygb3JpZW50YXRpb258fEIoIm1vYmlsZSIpLEhpPVdpJiZUaSxGaT1XaSYmTmksVWk9IXdpbmRvdy5Qb2ludGVyRXZlbnQmJndpbmRvdy5NU1BvaW50ZXJFdmVudCxWaT0hKCF3aW5kb3cuUG9pbnRlckV2ZW50JiYhVWkpLHFpPSF3aW5kb3cuTF9OT19UT1VDSCYmKFZpfHwib250b3VjaHN0YXJ0ImluIHdpbmRvd3x8d2luZG93LkRvY3VtZW50VG91Y2gmJmRvY3VtZW50IGluc3RhbmNlb2Ygd2luZG93LkRvY3VtZW50VG91Y2gpLEdpPVdpJiZaaSxLaT1XaSYma2ksWWk9KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHx3aW5kb3cuc2NyZWVuLmRldmljZVhEUEkvd2luZG93LnNjcmVlbi5sb2dpY2FsWERQSSk+MSxYaT0hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQsSmk9ISghZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TfHwhRSgic3ZnIikuY3JlYXRlU1ZHUmVjdCksJGk9IUppJiZmdW5jdGlvbigpe3RyeXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmlubmVySFRNTD0nPHY6c2hhcGUgYWRqPSIxIi8+Jzt2YXIgaT10LmZpcnN0Q2hpbGQ7cmV0dXJuIGkuc3R5bGUuYmVoYXZpb3I9InVybCgjZGVmYXVsdCNWTUwpIixpJiYib2JqZWN0Ij09dHlwZW9mIGkuYWRqfWNhdGNoKHQpe3JldHVybiExfX0oKSxRaT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7aWU6UGksaWVsdDk6TGksZWRnZTpiaSx3ZWJraXQ6VGksYW5kcm9pZDp6aSxhbmRyb2lkMjM6TWksYW5kcm9pZFN0b2NrOlNpLG9wZXJhOlppLGNocm9tZTpFaSxnZWNrbzpraSxzYWZhcmk6QmkscGhhbnRvbTpBaSxvcGVyYTEyOklpLHdpbjpPaSxpZTNkOlJpLHdlYmtpdDNkOk5pLGdlY2tvM2Q6RGksYW55M2Q6amksbW9iaWxlOldpLG1vYmlsZVdlYmtpdDpIaSxtb2JpbGVXZWJraXQzZDpGaSxtc1BvaW50ZXI6VWkscG9pbnRlcjpWaSx0b3VjaDpxaSxtb2JpbGVPcGVyYTpHaSxtb2JpbGVHZWNrbzpLaSxyZXRpbmE6WWksY2FudmFzOlhpLHN2ZzpKaSx2bWw6JGl9KSx0ZT1VaT8iTVNQb2ludGVyRG93biI6InBvaW50ZXJkb3duIixpZT1VaT8iTVNQb2ludGVyTW92ZSI6InBvaW50ZXJtb3ZlIixlZT1VaT8iTVNQb2ludGVyVXAiOiJwb2ludGVydXAiLG5lPVVpPyJNU1BvaW50ZXJDYW5jZWwiOiJwb2ludGVyY2FuY2VsIixvZT1bIklOUFVUIiwiU0VMRUNUIiwiT1BUSU9OIl0sc2U9e30scmU9ITEsYWU9MCxoZT1VaT8iTVNQb2ludGVyRG93biI6Vmk/InBvaW50ZXJkb3duIjoidG91Y2hzdGFydCIsdWU9VWk/Ik1TUG9pbnRlclVwIjpWaT8icG9pbnRlcnVwIjoidG91Y2hlbmQiLGxlPSJfbGVhZmxldF8iLGNlPXN0KFsidHJhbnNmb3JtIiwid2Via2l0VHJhbnNmb3JtIiwiT1RyYW5zZm9ybSIsIk1velRyYW5zZm9ybSIsIm1zVHJhbnNmb3JtIl0pLF9lPXN0KFsid2Via2l0VHJhbnNpdGlvbiIsInRyYW5zaXRpb24iLCJPVHJhbnNpdGlvbiIsIk1velRyYW5zaXRpb24iLCJtc1RyYW5zaXRpb24iXSksZGU9IndlYmtpdFRyYW5zaXRpb24iPT09X2V8fCJPVHJhbnNpdGlvbiI9PT1fZT9fZSsiRW5kIjoidHJhbnNpdGlvbmVuZCI7aWYoIm9uc2VsZWN0c3RhcnQiaW4gZG9jdW1lbnQpZmk9ZnVuY3Rpb24oKXttdCh3aW5kb3csInNlbGVjdHN0YXJ0IixQdCl9LGdpPWZ1bmN0aW9uKCl7ZnQod2luZG93LCJzZWxlY3RzdGFydCIsUHQpfTtlbHNle3ZhciBwZT1zdChbInVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwiT1VzZXJTZWxlY3QiLCJNb3pVc2VyU2VsZWN0IiwibXNVc2VyU2VsZWN0Il0pO2ZpPWZ1bmN0aW9uKCl7aWYocGUpe3ZhciB0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTt2aT10W3BlXSx0W3BlXT0ibm9uZSJ9fSxnaT1mdW5jdGlvbigpe3BlJiYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlW3BlXT12aSx2aT12b2lkIDApfX12YXIgbWUsZmUsZ2UsdmU9KE9iamVjdC5mcmVlemV8fE9iamVjdCkoe1RSQU5TRk9STTpjZSxUUkFOU0lUSU9OOl9lLFRSQU5TSVRJT05fRU5EOmRlLGdldDpWLGdldFN0eWxlOnEsY3JlYXRlOkcscmVtb3ZlOkssZW1wdHk6WSx0b0Zyb250OlgsdG9CYWNrOkosaGFzQ2xhc3M6JCxhZGRDbGFzczpRLHJlbW92ZUNsYXNzOnR0LHNldENsYXNzOml0LGdldENsYXNzOmV0LHNldE9wYWNpdHk6bnQsdGVzdFByb3A6c3Qsc2V0VHJhbnNmb3JtOnJ0LHNldFBvc2l0aW9uOmF0LGdldFBvc2l0aW9uOmh0LGRpc2FibGVUZXh0U2VsZWN0aW9uOmZpLGVuYWJsZVRleHRTZWxlY3Rpb246Z2ksZGlzYWJsZUltYWdlRHJhZzp1dCxlbmFibGVJbWFnZURyYWc6bHQscHJldmVudE91dGxpbmU6Y3QscmVzdG9yZU91dGxpbmU6X3QsZ2V0U2l6ZWRQYXJlbnROb2RlOmR0LGdldFNjYWxlOnB0fSkseWU9Il9sZWFmbGV0X2V2ZW50cyIseGU9T2kmJkVpPzIqd2luZG93LmRldmljZVBpeGVsUmF0aW86a2k/d2luZG93LmRldmljZVBpeGVsUmF0aW86MSx3ZT17fSxQZT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7b246bXQsb2ZmOmZ0LHN0b3BQcm9wYWdhdGlvbjp5dCxkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb246eHQsZGlzYWJsZUNsaWNrUHJvcGFnYXRpb246d3QscHJldmVudERlZmF1bHQ6UHQsc3RvcDpMdCxnZXRNb3VzZVBvc2l0aW9uOmJ0LGdldFdoZWVsRGVsdGE6VHQsZmFrZVN0b3A6enQsc2tpcHBlZDpNdCxpc0V4dGVybmFsVGFyZ2V0OkN0LGFkZExpc3RlbmVyOm10LHJlbW92ZUxpc3RlbmVyOmZ0fSksTGU9Y2kuZXh0ZW5kKHtydW46ZnVuY3Rpb24odCxpLGUsbil7dGhpcy5zdG9wKCksdGhpcy5fZWw9dCx0aGlzLl9pblByb2dyZXNzPSEwLHRoaXMuX2R1cmF0aW9uPWV8fC4yNSx0aGlzLl9lYXNlT3V0UG93ZXI9MS9NYXRoLm1heChufHwuNSwuMiksdGhpcy5fc3RhcnRQb3M9aHQodCksdGhpcy5fb2Zmc2V0PWkuc3VidHJhY3QodGhpcy5fc3RhcnRQb3MpLHRoaXMuX3N0YXJ0VGltZT0rbmV3IERhdGUsdGhpcy5maXJlKCJzdGFydCIpLHRoaXMuX2FuaW1hdGUoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2luUHJvZ3Jlc3MmJih0aGlzLl9zdGVwKCEwKSx0aGlzLl9jb21wbGV0ZSgpKX0sX2FuaW1hdGU6ZnVuY3Rpb24oKXt0aGlzLl9hbmltSWQ9Zih0aGlzLl9hbmltYXRlLHRoaXMpLHRoaXMuX3N0ZXAoKX0sX3N0ZXA6ZnVuY3Rpb24odCl7dmFyIGk9K25ldyBEYXRlLXRoaXMuX3N0YXJ0VGltZSxlPTFlMyp0aGlzLl9kdXJhdGlvbjtpPGU/dGhpcy5fcnVuRnJhbWUodGhpcy5fZWFzZU91dChpL2UpLHQpOih0aGlzLl9ydW5GcmFtZSgxKSx0aGlzLl9jb21wbGV0ZSgpKX0sX3J1bkZyYW1lOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fc3RhcnRQb3MuYWRkKHRoaXMuX29mZnNldC5tdWx0aXBseUJ5KHQpKTtpJiZlLl9yb3VuZCgpLGF0KHRoaXMuX2VsLGUpLHRoaXMuZmlyZSgic3RlcCIpfSxfY29tcGxldGU6ZnVuY3Rpb24oKXtnKHRoaXMuX2FuaW1JZCksdGhpcy5faW5Qcm9ncmVzcz0hMSx0aGlzLmZpcmUoImVuZCIpfSxfZWFzZU91dDpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsdGhpcy5fZWFzZU91dFBvd2VyKX19KSxiZT1jaS5leHRlbmQoe29wdGlvbnM6e2Nyczp5aSxjZW50ZXI6dm9pZCAwLHpvb206dm9pZCAwLG1pblpvb206dm9pZCAwLG1heFpvb206dm9pZCAwLGxheWVyczpbXSxtYXhCb3VuZHM6dm9pZCAwLHJlbmRlcmVyOnZvaWQgMCx6b29tQW5pbWF0aW9uOiEwLHpvb21BbmltYXRpb25UaHJlc2hvbGQ6NCxmYWRlQW5pbWF0aW9uOiEwLG1hcmtlclpvb21BbmltYXRpb246ITAsdHJhbnNmb3JtM0RMaW1pdDo4Mzg4NjA4LHpvb21TbmFwOjEsem9vbURlbHRhOjEsdHJhY2tSZXNpemU6ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtpPWwodGhpcyxpKSx0aGlzLl9oYW5kbGVycz1bXSx0aGlzLl9sYXllcnM9e30sdGhpcy5fem9vbUJvdW5kTGF5ZXJzPXt9LHRoaXMuX3NpemVDaGFuZ2VkPSEwLHRoaXMuX2luaXRDb250YWluZXIodCksdGhpcy5faW5pdExheW91dCgpLHRoaXMuX29uUmVzaXplPWUodGhpcy5fb25SZXNpemUsdGhpcyksdGhpcy5faW5pdEV2ZW50cygpLGkubWF4Qm91bmRzJiZ0aGlzLnNldE1heEJvdW5kcyhpLm1heEJvdW5kcyksdm9pZCAwIT09aS56b29tJiYodGhpcy5fem9vbT10aGlzLl9saW1pdFpvb20oaS56b29tKSksaS5jZW50ZXImJnZvaWQgMCE9PWkuem9vbSYmdGhpcy5zZXRWaWV3KEMoaS5jZW50ZXIpLGkuem9vbSx7cmVzZXQ6ITB9KSx0aGlzLmNhbGxJbml0SG9va3MoKSx0aGlzLl96b29tQW5pbWF0ZWQ9X2UmJmppJiYhR2kmJnRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uLHRoaXMuX3pvb21BbmltYXRlZCYmKHRoaXMuX2NyZWF0ZUFuaW1Qcm94eSgpLG10KHRoaXMuX3Byb3h5LGRlLHRoaXMuX2NhdGNoVHJhbnNpdGlvbkVuZCx0aGlzKSksdGhpcy5fYWRkTGF5ZXJzKHRoaXMub3B0aW9ucy5sYXllcnMpfSxzZXRWaWV3OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT12b2lkIDA9PT1lP3RoaXMuX3pvb206dGhpcy5fbGltaXRab29tKGUpLHQ9dGhpcy5fbGltaXRDZW50ZXIoQyh0KSxlLHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpLG49bnx8e30sdGhpcy5fc3RvcCgpLHRoaXMuX2xvYWRlZCYmIW4ucmVzZXQmJiEwIT09biYmKHZvaWQgMCE9PW4uYW5pbWF0ZSYmKG4uem9vbT1pKHthbmltYXRlOm4uYW5pbWF0ZX0sbi56b29tKSxuLnBhbj1pKHthbmltYXRlOm4uYW5pbWF0ZSxkdXJhdGlvbjpuLmR1cmF0aW9ufSxuLnBhbikpLHRoaXMuX3pvb20hPT1lP3RoaXMuX3RyeUFuaW1hdGVkWm9vbSYmdGhpcy5fdHJ5QW5pbWF0ZWRab29tKHQsZSxuLnpvb20pOnRoaXMuX3RyeUFuaW1hdGVkUGFuKHQsbi5wYW4pKT8oY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpcyk6KHRoaXMuX3Jlc2V0Vmlldyh0LGUpLHRoaXMpfSxzZXRab29tOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90aGlzLnNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0LHt6b29tOml9KToodGhpcy5fem9vbT10LHRoaXMpfSx6b29tSW46ZnVuY3Rpb24odCxpKXtyZXR1cm4gdD10fHwoamk/dGhpcy5vcHRpb25zLnpvb21EZWx0YToxKSx0aGlzLnNldFpvb20odGhpcy5fem9vbSt0LGkpfSx6b29tT3V0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQ9dHx8KGppP3RoaXMub3B0aW9ucy56b29tRGVsdGE6MSksdGhpcy5zZXRab29tKHRoaXMuX3pvb20tdCxpKX0sc2V0Wm9vbUFyb3VuZDpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5nZXRab29tU2NhbGUoaSksbz10aGlzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxzPSh0IGluc3RhbmNlb2YgeD90OnRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludCh0KSkuc3VidHJhY3QobykubXVsdGlwbHlCeSgxLTEvbikscj10aGlzLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoby5hZGQocykpO3JldHVybiB0aGlzLnNldFZpZXcocixpLHt6b29tOmV9KX0sX2dldEJvdW5kc0NlbnRlclpvb206ZnVuY3Rpb24odCxpKXtpPWl8fHt9LHQ9dC5nZXRCb3VuZHM/dC5nZXRCb3VuZHMoKTp6KHQpO3ZhciBlPXcoaS5wYWRkaW5nVG9wTGVmdHx8aS5wYWRkaW5nfHxbMCwwXSksbj13KGkucGFkZGluZ0JvdHRvbVJpZ2h0fHxpLnBhZGRpbmd8fFswLDBdKSxvPXRoaXMuZ2V0Qm91bmRzWm9vbSh0LCExLGUuYWRkKG4pKTtpZigobz0ibnVtYmVyIj09dHlwZW9mIGkubWF4Wm9vbT9NYXRoLm1pbihpLm1heFpvb20sbyk6byk9PT0xLzApcmV0dXJue2NlbnRlcjp0LmdldENlbnRlcigpLHpvb206b307dmFyIHM9bi5zdWJ0cmFjdChlKS5kaXZpZGVCeSgyKSxyPXRoaXMucHJvamVjdCh0LmdldFNvdXRoV2VzdCgpLG8pLGE9dGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksbyk7cmV0dXJue2NlbnRlcjp0aGlzLnVucHJvamVjdChyLmFkZChhKS5kaXZpZGVCeSgyKS5hZGQocyksbyksem9vbTpvfX0sZml0Qm91bmRzOmZ1bmN0aW9uKHQsaSl7aWYoISh0PXoodCkpLmlzVmFsaWQoKSl0aHJvdyBuZXcgRXJyb3IoIkJvdW5kcyBhcmUgbm90IHZhbGlkLiIpO3ZhciBlPXRoaXMuX2dldEJvdW5kc0NlbnRlclpvb20odCxpKTtyZXR1cm4gdGhpcy5zZXRWaWV3KGUuY2VudGVyLGUuem9vbSxpKX0sZml0V29ybGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZml0Qm91bmRzKFtbLTkwLC0xODBdLFs5MCwxODBdXSx0KX0scGFuVG86ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5zZXRWaWV3KHQsdGhpcy5fem9vbSx7cGFuOml9KX0scGFuQnk6ZnVuY3Rpb24odCxpKXtpZih0PXcodCkucm91bmQoKSxpPWl8fHt9LCF0LngmJiF0LnkpcmV0dXJuIHRoaXMuZmlyZSgibW92ZWVuZCIpO2lmKCEwIT09aS5hbmltYXRlJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnModCkpcmV0dXJuIHRoaXMuX3Jlc2V0Vmlldyh0aGlzLnVucHJvamVjdCh0aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSkuYWRkKHQpKSx0aGlzLmdldFpvb20oKSksdGhpcztpZih0aGlzLl9wYW5BbmltfHwodGhpcy5fcGFuQW5pbT1uZXcgTGUsdGhpcy5fcGFuQW5pbS5vbih7c3RlcDp0aGlzLl9vblBhblRyYW5zaXRpb25TdGVwLGVuZDp0aGlzLl9vblBhblRyYW5zaXRpb25FbmR9LHRoaXMpKSxpLm5vTW92ZVN0YXJ0fHx0aGlzLmZpcmUoIm1vdmVzdGFydCIpLCExIT09aS5hbmltYXRlKXtRKHRoaXMuX21hcFBhbmUsImxlYWZsZXQtcGFuLWFuaW0iKTt2YXIgZT10aGlzLl9nZXRNYXBQYW5lUG9zKCkuc3VidHJhY3QodCkucm91bmQoKTt0aGlzLl9wYW5BbmltLnJ1bih0aGlzLl9tYXBQYW5lLGUsaS5kdXJhdGlvbnx8LjI1LGkuZWFzZUxpbmVhcml0eSl9ZWxzZSB0aGlzLl9yYXdQYW5CeSh0KSx0aGlzLmZpcmUoIm1vdmUiKS5maXJlKCJtb3ZlZW5kIik7cmV0dXJuIHRoaXN9LGZseVRvOmZ1bmN0aW9uKHQsaSxlKXtmdW5jdGlvbiBuKHQpe3ZhciBpPShnKmctbSptKyh0Py0xOjEpKngqeCp2KnYpLygyKih0P2c6bSkqeCp2KSxlPU1hdGguc3FydChpKmkrMSktaTtyZXR1cm4gZTwxZS05Py0xODpNYXRoLmxvZyhlKX1mdW5jdGlvbiBvKHQpe3JldHVybihNYXRoLmV4cCh0KS1NYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm4oTWF0aC5leHAodCkrTWF0aC5leHAoLXQpKS8yfWZ1bmN0aW9uIHIodCl7cmV0dXJuIG8odCkvcyh0KX1mdW5jdGlvbiBhKHQpe3JldHVybiBtKihzKHcpL3Modyt5KnQpKX1mdW5jdGlvbiBoKHQpe3JldHVybiBtKihzKHcpKnIodyt5KnQpLW8odykpL3h9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsMS41KX1mdW5jdGlvbiBsKCl7dmFyIGU9KERhdGUubm93KCktUCkvYixuPXUoZSkqTDtlPD0xPyh0aGlzLl9mbHlUb0ZyYW1lPWYobCx0aGlzKSx0aGlzLl9tb3ZlKHRoaXMudW5wcm9qZWN0KGMuYWRkKF8uc3VidHJhY3QoYykubXVsdGlwbHlCeShoKG4pL3YpKSxwKSx0aGlzLmdldFNjYWxlWm9vbShtL2EobikscCkse2ZseVRvOiEwfSkpOnRoaXMuX21vdmUodCxpKS5fbW92ZUVuZCghMCl9aWYoITE9PT0oZT1lfHx7fSkuYW5pbWF0ZXx8IWppKXJldHVybiB0aGlzLnNldFZpZXcodCxpLGUpO3RoaXMuX3N0b3AoKTt2YXIgYz10aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSksXz10aGlzLnByb2plY3QodCksZD10aGlzLmdldFNpemUoKSxwPXRoaXMuX3pvb207dD1DKHQpLGk9dm9pZCAwPT09aT9wOmk7dmFyIG09TWF0aC5tYXgoZC54LGQueSksZz1tKnRoaXMuZ2V0Wm9vbVNjYWxlKHAsaSksdj1fLmRpc3RhbmNlVG8oYyl8fDEseT0xLjQyLHg9eSp5LHc9bigwKSxQPURhdGUubm93KCksTD0obigxKS13KS95LGI9ZS5kdXJhdGlvbj8xZTMqZS5kdXJhdGlvbjoxZTMqTCouODtyZXR1cm4gdGhpcy5fbW92ZVN0YXJ0KCEwLGUubm9Nb3ZlU3RhcnQpLGwuY2FsbCh0aGlzKSx0aGlzfSxmbHlUb0JvdW5kczpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX2dldEJvdW5kc0NlbnRlclpvb20odCxpKTtyZXR1cm4gdGhpcy5mbHlUbyhlLmNlbnRlcixlLnpvb20saSl9LHNldE1heEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4odD16KHQpKS5pc1ZhbGlkKCk/KHRoaXMub3B0aW9ucy5tYXhCb3VuZHMmJnRoaXMub2ZmKCJtb3ZlZW5kIix0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpLHRoaXMub3B0aW9ucy5tYXhCb3VuZHM9dCx0aGlzLl9sb2FkZWQmJnRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcygpLHRoaXMub24oIm1vdmVlbmQiLHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcykpOih0aGlzLm9wdGlvbnMubWF4Qm91bmRzPW51bGwsdGhpcy5vZmYoIm1vdmVlbmQiLHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcykpfSxzZXRNaW5ab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucy5taW5ab29tO3JldHVybiB0aGlzLm9wdGlvbnMubWluWm9vbT10LHRoaXMuX2xvYWRlZCYmaSE9PXQmJih0aGlzLmZpcmUoInpvb21sZXZlbHNjaGFuZ2UiKSx0aGlzLmdldFpvb20oKTx0aGlzLm9wdGlvbnMubWluWm9vbSk/dGhpcy5zZXRab29tKHQpOnRoaXN9LHNldE1heFpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLm1heFpvb207cmV0dXJuIHRoaXMub3B0aW9ucy5tYXhab29tPXQsdGhpcy5fbG9hZGVkJiZpIT09dCYmKHRoaXMuZmlyZSgiem9vbWxldmVsc2NoYW5nZSIpLHRoaXMuZ2V0Wm9vbSgpPnRoaXMub3B0aW9ucy5tYXhab29tKT90aGlzLnNldFpvb20odCk6dGhpc30scGFuSW5zaWRlQm91bmRzOmZ1bmN0aW9uKHQsaSl7dGhpcy5fZW5mb3JjaW5nQm91bmRzPSEwO3ZhciBlPXRoaXMuZ2V0Q2VudGVyKCksbj10aGlzLl9saW1pdENlbnRlcihlLHRoaXMuX3pvb20seih0KSk7cmV0dXJuIGUuZXF1YWxzKG4pfHx0aGlzLnBhblRvKG4saSksdGhpcy5fZW5mb3JjaW5nQm91bmRzPSExLHRoaXN9LHBhbkluc2lkZTpmdW5jdGlvbih0LGkpe3ZhciBlPXcoKGk9aXx8e30pLnBhZGRpbmdUb3BMZWZ0fHxpLnBhZGRpbmd8fFswLDBdKSxuPXcoaS5wYWRkaW5nQm90dG9tUmlnaHR8fGkucGFkZGluZ3x8WzAsMF0pLG89dGhpcy5nZXRDZW50ZXIoKSxzPXRoaXMucHJvamVjdChvKSxyPXRoaXMucHJvamVjdCh0KSxhPXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxoPWEuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLHU9YihbYS5taW4uYWRkKGUpLGEubWF4LnN1YnRyYWN0KG4pXSk7aWYoIXUuY29udGFpbnMocikpe3RoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMDt2YXIgbD1zLnN1YnRyYWN0KHIpLGM9dyhyLngrbC54LHIueStsLnkpOyhyLng8dS5taW4ueHx8ci54PnUubWF4LngpJiYoYy54PXMueC1sLngsbC54PjA/Yy54Kz1oLngtZS54OmMueC09aC54LW4ueCksKHIueTx1Lm1pbi55fHxyLnk+dS5tYXgueSkmJihjLnk9cy55LWwueSxsLnk+MD9jLnkrPWgueS1lLnk6Yy55LT1oLnktbi55KSx0aGlzLnBhblRvKHRoaXMudW5wcm9qZWN0KGMpLGkpLHRoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMX1yZXR1cm4gdGhpc30saW52YWxpZGF0ZVNpemU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4gdGhpczt0PWkoe2FuaW1hdGU6ITEscGFuOiEwfSwhMD09PXQ/e2FuaW1hdGU6ITB9OnQpO3ZhciBuPXRoaXMuZ2V0U2l6ZSgpO3RoaXMuX3NpemVDaGFuZ2VkPSEwLHRoaXMuX2xhc3RDZW50ZXI9bnVsbDt2YXIgbz10aGlzLmdldFNpemUoKSxzPW4uZGl2aWRlQnkoMikucm91bmQoKSxyPW8uZGl2aWRlQnkoMikucm91bmQoKSxhPXMuc3VidHJhY3Qocik7cmV0dXJuIGEueHx8YS55Pyh0LmFuaW1hdGUmJnQucGFuP3RoaXMucGFuQnkoYSk6KHQucGFuJiZ0aGlzLl9yYXdQYW5CeShhKSx0aGlzLmZpcmUoIm1vdmUiKSx0LmRlYm91bmNlTW92ZWVuZD8oY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpcy5fc2l6ZVRpbWVyPXNldFRpbWVvdXQoZSh0aGlzLmZpcmUsdGhpcywibW92ZWVuZCIpLDIwMCkpOnRoaXMuZmlyZSgibW92ZWVuZCIpKSx0aGlzLmZpcmUoInJlc2l6ZSIse29sZFNpemU6bixuZXdTaXplOm99KSk6dGhpc30sc3RvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFpvb20odGhpcy5fbGltaXRab29tKHRoaXMuX3pvb20pKSx0aGlzLm9wdGlvbnMuem9vbVNuYXB8fHRoaXMuZmlyZSgidmlld3Jlc2V0IiksdGhpcy5fc3RvcCgpfSxsb2NhdGU6ZnVuY3Rpb24odCl7aWYodD10aGlzLl9sb2NhdGVPcHRpb25zPWkoe3RpbWVvdXQ6MWU0LHdhdGNoOiExfSx0KSwhKCJnZW9sb2NhdGlvbiJpbiBuYXZpZ2F0b3IpKXJldHVybiB0aGlzLl9oYW5kbGVHZW9sb2NhdGlvbkVycm9yKHtjb2RlOjAsbWVzc2FnZToiR2VvbG9jYXRpb24gbm90IHN1cHBvcnRlZC4ifSksdGhpczt2YXIgbj1lKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UsdGhpcyksbz1lKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3IsdGhpcyk7cmV0dXJuIHQud2F0Y2g/dGhpcy5fbG9jYXRpb25XYXRjaElkPW5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKG4sbyx0KTpuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKG4sbyx0KSx0aGlzfSxzdG9wTG9jYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci5nZW9sb2NhdGlvbiYmbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2gmJm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2xvY2F0aW9uV2F0Y2hJZCksdGhpcy5fbG9jYXRlT3B0aW9ucyYmKHRoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0Vmlldz0hMSksdGhpc30sX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3I6ZnVuY3Rpb24odCl7dmFyIGk9dC5jb2RlLGU9dC5tZXNzYWdlfHwoMT09PWk/InBlcm1pc3Npb24gZGVuaWVkIjoyPT09aT8icG9zaXRpb24gdW5hdmFpbGFibGUiOiJ0aW1lb3V0Iik7dGhpcy5fbG9jYXRlT3B0aW9ucy5zZXRWaWV3JiYhdGhpcy5fbG9hZGVkJiZ0aGlzLmZpdFdvcmxkKCksdGhpcy5maXJlKCJsb2NhdGlvbmVycm9yIix7Y29kZTppLG1lc3NhZ2U6Ikdlb2xvY2F0aW9uIGVycm9yOiAiK2UrIi4ifSl9LF9oYW5kbGVHZW9sb2NhdGlvblJlc3BvbnNlOmZ1bmN0aW9uKHQpe3ZhciBpPW5ldyBNKHQuY29vcmRzLmxhdGl0dWRlLHQuY29vcmRzLmxvbmdpdHVkZSksZT1pLnRvQm91bmRzKDIqdC5jb29yZHMuYWNjdXJhY3kpLG49dGhpcy5fbG9jYXRlT3B0aW9ucztpZihuLnNldFZpZXcpe3ZhciBvPXRoaXMuZ2V0Qm91bmRzWm9vbShlKTt0aGlzLnNldFZpZXcoaSxuLm1heFpvb20/TWF0aC5taW4obyxuLm1heFpvb20pOm8pfXZhciBzPXtsYXRsbmc6aSxib3VuZHM6ZSx0aW1lc3RhbXA6dC50aW1lc3RhbXB9O2Zvcih2YXIgciBpbiB0LmNvb3JkcykibnVtYmVyIj09dHlwZW9mIHQuY29vcmRzW3JdJiYoc1tyXT10LmNvb3Jkc1tyXSk7dGhpcy5maXJlKCJsb2NhdGlvbmZvdW5kIixzKX0sYWRkSGFuZGxlcjpmdW5jdGlvbih0LGkpe2lmKCFpKXJldHVybiB0aGlzO3ZhciBlPXRoaXNbdF09bmV3IGkodGhpcyk7cmV0dXJuIHRoaXMuX2hhbmRsZXJzLnB1c2goZSksdGhpcy5vcHRpb25zW3RdJiZlLmVuYWJsZSgpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2luaXRFdmVudHMoITApLHRoaXMuX2NvbnRhaW5lcklkIT09dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBpcyBiZWluZyByZXVzZWQgYnkgYW5vdGhlciBpbnN0YW5jZSIpO3RyeXtkZWxldGUgdGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkLGRlbGV0ZSB0aGlzLl9jb250YWluZXJJZH1jYXRjaCh0KXt0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQ9dm9pZCAwLHRoaXMuX2NvbnRhaW5lcklkPXZvaWQgMH12b2lkIDAhPT10aGlzLl9sb2NhdGlvbldhdGNoSWQmJnRoaXMuc3RvcExvY2F0ZSgpLHRoaXMuX3N0b3AoKSxLKHRoaXMuX21hcFBhbmUpLHRoaXMuX2NsZWFyQ29udHJvbFBvcyYmdGhpcy5fY2xlYXJDb250cm9sUG9zKCksdGhpcy5fcmVzaXplUmVxdWVzdCYmKGcodGhpcy5fcmVzaXplUmVxdWVzdCksdGhpcy5fcmVzaXplUmVxdWVzdD1udWxsKSx0aGlzLl9jbGVhckhhbmRsZXJzKCksdGhpcy5fbG9hZGVkJiZ0aGlzLmZpcmUoInVubG9hZCIpO3ZhciB0O2Zvcih0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0ucmVtb3ZlKCk7Zm9yKHQgaW4gdGhpcy5fcGFuZXMpSyh0aGlzLl9wYW5lc1t0XSk7cmV0dXJuIHRoaXMuX2xheWVycz1bXSx0aGlzLl9wYW5lcz1bXSxkZWxldGUgdGhpcy5fbWFwUGFuZSxkZWxldGUgdGhpcy5fcmVuZGVyZXIsdGhpc30sY3JlYXRlUGFuZTpmdW5jdGlvbih0LGkpe3ZhciBlPUcoImRpdiIsImxlYWZsZXQtcGFuZSIrKHQ/IiBsZWFmbGV0LSIrdC5yZXBsYWNlKCJQYW5lIiwiIikrIi1wYW5lIjoiIiksaXx8dGhpcy5fbWFwUGFuZSk7cmV0dXJuIHQmJih0aGlzLl9wYW5lc1t0XT1lKSxlfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tJZkxvYWRlZCgpLHRoaXMuX2xhc3RDZW50ZXImJiF0aGlzLl9tb3ZlZCgpP3RoaXMuX2xhc3RDZW50ZXI6dGhpcy5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sZ2V0Wm9vbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96b29tfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFBpeGVsQm91bmRzKCk7cmV0dXJuIG5ldyBUKHRoaXMudW5wcm9qZWN0KHQuZ2V0Qm90dG9tTGVmdCgpKSx0aGlzLnVucHJvamVjdCh0LmdldFRvcFJpZ2h0KCkpKX0sZ2V0TWluWm9vbTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLm9wdGlvbnMubWluWm9vbT90aGlzLl9sYXllcnNNaW5ab29tfHwwOnRoaXMub3B0aW9ucy5taW5ab29tfSxnZXRNYXhab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMub3B0aW9ucy5tYXhab29tP3ZvaWQgMD09PXRoaXMuX2xheWVyc01heFpvb20/MS8wOnRoaXMuX2xheWVyc01heFpvb206dGhpcy5vcHRpb25zLm1heFpvb219LGdldEJvdW5kc1pvb206ZnVuY3Rpb24odCxpLGUpe3Q9eih0KSxlPXcoZXx8WzAsMF0pO3ZhciBuPXRoaXMuZ2V0Wm9vbSgpfHwwLG89dGhpcy5nZXRNaW5ab29tKCkscz10aGlzLmdldE1heFpvb20oKSxyPXQuZ2V0Tm9ydGhXZXN0KCksYT10LmdldFNvdXRoRWFzdCgpLGg9dGhpcy5nZXRTaXplKCkuc3VidHJhY3QoZSksdT1iKHRoaXMucHJvamVjdChhLG4pLHRoaXMucHJvamVjdChyLG4pKS5nZXRTaXplKCksbD1qaT90aGlzLm9wdGlvbnMuem9vbVNuYXA6MSxjPWgueC91LngsXz1oLnkvdS55LGQ9aT9NYXRoLm1heChjLF8pOk1hdGgubWluKGMsXyk7cmV0dXJuIG49dGhpcy5nZXRTY2FsZVpvb20oZCxuKSxsJiYobj1NYXRoLnJvdW5kKG4vKGwvMTAwKSkqKGwvMTAwKSxuPWk/TWF0aC5jZWlsKG4vbCkqbDpNYXRoLmZsb29yKG4vbCkqbCksTWF0aC5tYXgobyxNYXRoLm1pbihzLG4pKX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplJiYhdGhpcy5fc2l6ZUNoYW5nZWR8fCh0aGlzLl9zaXplPW5ldyB4KHRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aHx8MCx0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0fHwwKSx0aGlzLl9zaXplQ2hhbmdlZD0hMSksdGhpcy5fc2l6ZS5jbG9uZSgpfSxnZXRQaXhlbEJvdW5kczpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX2dldFRvcExlZnRQb2ludCh0LGkpO3JldHVybiBuZXcgUChlLGUuYWRkKHRoaXMuZ2V0U2l6ZSgpKSl9LGdldFBpeGVsT3JpZ2luOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrSWZMb2FkZWQoKSx0aGlzLl9waXhlbE9yaWdpbn0sZ2V0UGl4ZWxXb3JsZEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5nZXRQcm9qZWN0ZWRCb3VuZHModm9pZCAwPT09dD90aGlzLmdldFpvb20oKTp0KX0sZ2V0UGFuZTpmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5fcGFuZXNbdF06dH0sZ2V0UGFuZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFuZXN9LGdldENvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LGdldFpvb21TY2FsZTpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMub3B0aW9ucy5jcnM7cmV0dXJuIGk9dm9pZCAwPT09aT90aGlzLl96b29tOmksZS5zY2FsZSh0KS9lLnNjYWxlKGkpfSxnZXRTY2FsZVpvb206ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLm9wdGlvbnMuY3JzO2k9dm9pZCAwPT09aT90aGlzLl96b29tOmk7dmFyIG49ZS56b29tKHQqZS5zY2FsZShpKSk7cmV0dXJuIGlzTmFOKG4pPzEvMDpufSxwcm9qZWN0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9dm9pZCAwPT09aT90aGlzLl96b29tOmksdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KEModCksaSl9LHVucHJvamVjdDpmdW5jdGlvbih0LGkpe3JldHVybiBpPXZvaWQgMD09PWk/dGhpcy5fem9vbTppLHRoaXMub3B0aW9ucy5jcnMucG9pbnRUb0xhdExuZyh3KHQpLGkpfSxsYXllclBvaW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dyh0KS5hZGQodGhpcy5nZXRQaXhlbE9yaWdpbigpKTtyZXR1cm4gdGhpcy51bnByb2plY3QoaSl9LGxhdExuZ1RvTGF5ZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0KEModCkpLl9yb3VuZCgpLl9zdWJ0cmFjdCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpfSx3cmFwTGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuY3JzLndyYXBMYXRMbmcoQyh0KSl9LHdyYXBMYXRMbmdCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZ0JvdW5kcyh6KHQpKX0sZGlzdGFuY2U6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5kaXN0YW5jZShDKHQpLEMoaSkpfSxjb250YWluZXJQb2ludFRvTGF5ZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdyh0KS5zdWJ0cmFjdCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxsYXllclBvaW50VG9Db250YWluZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdyh0KS5hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKX0sY29udGFpbmVyUG9pbnRUb0xhdExuZzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHcodCkpO3JldHVybiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhpKX0sbGF0TG5nVG9Db250YWluZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0aGlzLmxhdExuZ1RvTGF5ZXJQb2ludChDKHQpKSl9LG1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBidCh0LHRoaXMuX2NvbnRhaW5lcil9LG1vdXNlRXZlbnRUb0xheWVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSl9LG1vdXNlRXZlbnRUb0xhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclBvaW50VG9MYXRMbmcodGhpcy5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpKX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fY29udGFpbmVyPVYodCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJNYXAgY29udGFpbmVyIG5vdCBmb3VuZC4iKTtpZihpLl9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiIpO210KGksInNjcm9sbCIsdGhpcy5fb25TY3JvbGwsdGhpcyksdGhpcy5fY29udGFpbmVySWQ9bihpKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI7dGhpcy5fZmFkZUFuaW1hdGVkPXRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uJiZqaSxRKHQsImxlYWZsZXQtY29udGFpbmVyIisocWk/IiBsZWFmbGV0LXRvdWNoIjoiIikrKFlpPyIgbGVhZmxldC1yZXRpbmEiOiIiKSsoTGk/IiBsZWFmbGV0LW9sZGllIjoiIikrKEJpPyIgbGVhZmxldC1zYWZhcmkiOiIiKSsodGhpcy5fZmFkZUFuaW1hdGVkPyIgbGVhZmxldC1mYWRlLWFuaW0iOiIiKSk7dmFyIGk9cSh0LCJwb3NpdGlvbiIpOyJhYnNvbHV0ZSIhPT1pJiYicmVsYXRpdmUiIT09aSYmImZpeGVkIiE9PWkmJih0LnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHRoaXMuX2luaXRQYW5lcygpLHRoaXMuX2luaXRDb250cm9sUG9zJiZ0aGlzLl9pbml0Q29udHJvbFBvcygpfSxfaW5pdFBhbmVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFuZXM9e307dGhpcy5fcGFuZVJlbmRlcmVycz17fSx0aGlzLl9tYXBQYW5lPXRoaXMuY3JlYXRlUGFuZSgibWFwUGFuZSIsdGhpcy5fY29udGFpbmVyKSxhdCh0aGlzLl9tYXBQYW5lLG5ldyB4KDAsMCkpLHRoaXMuY3JlYXRlUGFuZSgidGlsZVBhbmUiKSx0aGlzLmNyZWF0ZVBhbmUoInNoYWRvd1BhbmUiKSx0aGlzLmNyZWF0ZVBhbmUoIm92ZXJsYXlQYW5lIiksdGhpcy5jcmVhdGVQYW5lKCJtYXJrZXJQYW5lIiksdGhpcy5jcmVhdGVQYW5lKCJ0b29sdGlwUGFuZSIpLHRoaXMuY3JlYXRlUGFuZSgicG9wdXBQYW5lIiksdGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChRKHQubWFya2VyUGFuZSwibGVhZmxldC16b29tLWhpZGUiKSxRKHQuc2hhZG93UGFuZSwibGVhZmxldC16b29tLWhpZGUiKSl9LF9yZXNldFZpZXc6ZnVuY3Rpb24odCxpKXthdCh0aGlzLl9tYXBQYW5lLG5ldyB4KDAsMCkpO3ZhciBlPSF0aGlzLl9sb2FkZWQ7dGhpcy5fbG9hZGVkPSEwLGk9dGhpcy5fbGltaXRab29tKGkpLHRoaXMuZmlyZSgidmlld3ByZXJlc2V0Iik7dmFyIG49dGhpcy5fem9vbSE9PWk7dGhpcy5fbW92ZVN0YXJ0KG4sITEpLl9tb3ZlKHQsaSkuX21vdmVFbmQobiksdGhpcy5maXJlKCJ2aWV3cmVzZXQiKSxlJiZ0aGlzLmZpcmUoImxvYWQiKX0sX21vdmVTdGFydDpmdW5jdGlvbih0LGkpe3JldHVybiB0JiZ0aGlzLmZpcmUoInpvb21zdGFydCIpLGl8fHRoaXMuZmlyZSgibW92ZXN0YXJ0IiksdGhpc30sX21vdmU6ZnVuY3Rpb24odCxpLGUpe3ZvaWQgMD09PWkmJihpPXRoaXMuX3pvb20pO3ZhciBuPXRoaXMuX3pvb20hPT1pO3JldHVybiB0aGlzLl96b29tPWksdGhpcy5fbGFzdENlbnRlcj10LHRoaXMuX3BpeGVsT3JpZ2luPXRoaXMuX2dldE5ld1BpeGVsT3JpZ2luKHQpLChufHxlJiZlLnBpbmNoKSYmdGhpcy5maXJlKCJ6b29tIixlKSx0aGlzLmZpcmUoIm1vdmUiLGUpfSxfbW92ZUVuZDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5maXJlKCJ6b29tZW5kIiksdGhpcy5maXJlKCJtb3ZlZW5kIil9LF9zdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5fZmx5VG9GcmFtZSksdGhpcy5fcGFuQW5pbSYmdGhpcy5fcGFuQW5pbS5zdG9wKCksdGhpc30sX3Jhd1BhbkJ5OmZ1bmN0aW9uKHQpe2F0KHRoaXMuX21hcFBhbmUsdGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KHQpKX0sX2dldFpvb21TcGFuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TWF4Wm9vbSgpLXRoaXMuZ2V0TWluWm9vbSgpfSxfcGFuSW5zaWRlTWF4Qm91bmRzOmZ1bmN0aW9uKCl7dGhpcy5fZW5mb3JjaW5nQm91bmRzfHx0aGlzLnBhbkluc2lkZUJvdW5kcyh0aGlzLm9wdGlvbnMubWF4Qm91bmRzKX0sX2NoZWNrSWZMb2FkZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcigiU2V0IG1hcCBjZW50ZXIgYW5kIHpvb20gZmlyc3QuIil9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKHQpe3RoaXMuX3RhcmdldHM9e30sdGhpcy5fdGFyZ2V0c1tuKHRoaXMuX2NvbnRhaW5lcildPXRoaXM7dmFyIGk9dD9mdDptdDtpKHRoaXMuX2NvbnRhaW5lciwiY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlbW92ZSBjb250ZXh0bWVudSBrZXlwcmVzcyIsdGhpcy5faGFuZGxlRE9NRXZlbnQsdGhpcyksdGhpcy5vcHRpb25zLnRyYWNrUmVzaXplJiZpKHdpbmRvdywicmVzaXplIix0aGlzLl9vblJlc2l6ZSx0aGlzKSxqaSYmdGhpcy5vcHRpb25zLnRyYW5zZm9ybTNETGltaXQmJih0P3RoaXMub2ZmOnRoaXMub24pLmNhbGwodGhpcywibW92ZWVuZCIsdGhpcy5fb25Nb3ZlRW5kKX0sX29uUmVzaXplOmZ1bmN0aW9uKCl7Zyh0aGlzLl9yZXNpemVSZXF1ZXN0KSx0aGlzLl9yZXNpemVSZXF1ZXN0PWYoZnVuY3Rpb24oKXt0aGlzLmludmFsaWRhdGVTaXplKHtkZWJvdW5jZU1vdmVlbmQ6ITB9KX0sdGhpcyl9LF9vblNjcm9sbDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3A9MCx0aGlzLl9jb250YWluZXIuc2Nyb2xsTGVmdD0wfSxfb25Nb3ZlRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO01hdGgubWF4KE1hdGguYWJzKHQueCksTWF0aC5hYnModC55KSk+PXRoaXMub3B0aW9ucy50cmFuc2Zvcm0zRExpbWl0JiZ0aGlzLl9yZXNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0aGlzLmdldFpvb20oKSl9LF9maW5kRXZlbnRUYXJnZXRzOmZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBlLG89W10scz0ibW91c2VvdXQiPT09aXx8Im1vdXNlb3ZlciI9PT1pLHI9dC50YXJnZXR8fHQuc3JjRWxlbWVudCxhPSExO3I7KXtpZigoZT10aGlzLl90YXJnZXRzW24ocildKSYmKCJjbGljayI9PT1pfHwicHJlY2xpY2siPT09aSkmJiF0Ll9zaW11bGF0ZWQmJnRoaXMuX2RyYWdnYWJsZU1vdmVkKGUpKXthPSEwO2JyZWFrfWlmKGUmJmUubGlzdGVucyhpLCEwKSl7aWYocyYmIUN0KHIsdCkpYnJlYWs7aWYoby5wdXNoKGUpLHMpYnJlYWt9aWYocj09PXRoaXMuX2NvbnRhaW5lcilicmVhaztyPXIucGFyZW50Tm9kZX1yZXR1cm4gby5sZW5ndGh8fGF8fHN8fCFDdChyLHQpfHwobz1bdGhpc10pLG99LF9oYW5kbGVET01FdmVudDpmdW5jdGlvbih0KXtpZih0aGlzLl9sb2FkZWQmJiFNdCh0KSl7dmFyIGk9dC50eXBlOyJtb3VzZWRvd24iIT09aSYmImtleXByZXNzIiE9PWl8fGN0KHQudGFyZ2V0fHx0LnNyY0VsZW1lbnQpLHRoaXMuX2ZpcmVET01FdmVudCh0LGkpfX0sX21vdXNlRXZlbnRzOlsiY2xpY2siLCJkYmxjbGljayIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiY29udGV4dG1lbnUiXSxfZmlyZURPTUV2ZW50OmZ1bmN0aW9uKHQsZSxuKXtpZigiY2xpY2siPT09dC50eXBlKXt2YXIgbz1pKHt9LHQpO28udHlwZT0icHJlY2xpY2siLHRoaXMuX2ZpcmVET01FdmVudChvLG8udHlwZSxuKX1pZighdC5fc3RvcHBlZCYmKG49KG58fFtdKS5jb25jYXQodGhpcy5fZmluZEV2ZW50VGFyZ2V0cyh0LGUpKSkubGVuZ3RoKXt2YXIgcz1uWzBdOyJjb250ZXh0bWVudSI9PT1lJiZzLmxpc3RlbnMoZSwhMCkmJlB0KHQpO3ZhciByPXtvcmlnaW5hbEV2ZW50OnR9O2lmKCJrZXlwcmVzcyIhPT10LnR5cGUpe3ZhciBhPXMuZ2V0TGF0TG5nJiYoIXMuX3JhZGl1c3x8cy5fcmFkaXVzPD0xMCk7ci5jb250YWluZXJQb2ludD1hP3RoaXMubGF0TG5nVG9Db250YWluZXJQb2ludChzLmdldExhdExuZygpKTp0aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLHIubGF5ZXJQb2ludD10aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHIuY29udGFpbmVyUG9pbnQpLHIubGF0bG5nPWE/cy5nZXRMYXRMbmcoKTp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhyLmxheWVyUG9pbnQpfWZvcih2YXIgaD0wO2g8bi5sZW5ndGg7aCsrKWlmKG5baF0uZmlyZShlLHIsITApLHIub3JpZ2luYWxFdmVudC5fc3RvcHBlZHx8ITE9PT1uW2hdLm9wdGlvbnMuYnViYmxpbmdNb3VzZUV2ZW50cyYmLTEhPT1kKHRoaXMuX21vdXNlRXZlbnRzLGUpKXJldHVybn19LF9kcmFnZ2FibGVNb3ZlZDpmdW5jdGlvbih0KXtyZXR1cm4odD10LmRyYWdnaW5nJiZ0LmRyYWdnaW5nLmVuYWJsZWQoKT90OnRoaXMpLmRyYWdnaW5nJiZ0LmRyYWdnaW5nLm1vdmVkKCl8fHRoaXMuYm94Wm9vbSYmdGhpcy5ib3hab29tLm1vdmVkKCl9LF9jbGVhckhhbmRsZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsaT10aGlzLl9oYW5kbGVycy5sZW5ndGg7dDxpO3QrKyl0aGlzLl9oYW5kbGVyc1t0XS5kaXNhYmxlKCl9LHdoZW5SZWFkeTpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl9sb2FkZWQ/dC5jYWxsKGl8fHRoaXMse3RhcmdldDp0aGlzfSk6dGhpcy5vbigibG9hZCIsdCxpKSx0aGlzfSxfZ2V0TWFwUGFuZVBvczpmdW5jdGlvbigpe3JldHVybiBodCh0aGlzLl9tYXBQYW5lKXx8bmV3IHgoMCwwKX0sX21vdmVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO3JldHVybiB0JiYhdC5lcXVhbHMoWzAsMF0pfSxfZ2V0VG9wTGVmdFBvaW50OmZ1bmN0aW9uKHQsaSl7cmV0dXJuKHQmJnZvaWQgMCE9PWk/dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4odCxpKTp0aGlzLmdldFBpeGVsT3JpZ2luKCkpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LF9nZXROZXdQaXhlbE9yaWdpbjpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuZ2V0U2l6ZSgpLl9kaXZpZGVCeSgyKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsaSkuX3N1YnRyYWN0KGUpLl9hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKS5fcm91bmQoKX0sX2xhdExuZ1RvTmV3TGF5ZXJQb2ludDpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oZSxpKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsaSkuX3N1YnRyYWN0KG4pfSxfbGF0TG5nQm91bmRzVG9OZXdMYXllckJvdW5kczpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oZSxpKTtyZXR1cm4gYihbdGhpcy5wcm9qZWN0KHQuZ2V0U291dGhXZXN0KCksaSkuX3N1YnRyYWN0KG4pLHRoaXMucHJvamVjdCh0LmdldE5vcnRoV2VzdCgpLGkpLl9zdWJ0cmFjdChuKSx0aGlzLnByb2plY3QodC5nZXRTb3V0aEVhc3QoKSxpKS5fc3VidHJhY3QobiksdGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksaSkuX3N1YnRyYWN0KG4pXSl9LF9nZXRDZW50ZXJMYXllclBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKX0sX2dldENlbnRlck9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodCkuc3VidHJhY3QodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sX2xpbWl0Q2VudGVyOmZ1bmN0aW9uKHQsaSxlKXtpZighZSlyZXR1cm4gdDt2YXIgbj10aGlzLnByb2plY3QodCxpKSxvPXRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLHM9bmV3IFAobi5zdWJ0cmFjdChvKSxuLmFkZChvKSkscj10aGlzLl9nZXRCb3VuZHNPZmZzZXQocyxlLGkpO3JldHVybiByLnJvdW5kKCkuZXF1YWxzKFswLDBdKT90OnRoaXMudW5wcm9qZWN0KG4uYWRkKHIpLGkpfSxfbGltaXRPZmZzZXQ6ZnVuY3Rpb24odCxpKXtpZighaSlyZXR1cm4gdDt2YXIgZT10aGlzLmdldFBpeGVsQm91bmRzKCksbj1uZXcgUChlLm1pbi5hZGQodCksZS5tYXguYWRkKHQpKTtyZXR1cm4gdC5hZGQodGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KG4saSkpfSxfZ2V0Qm91bmRzT2Zmc2V0OmZ1bmN0aW9uKHQsaSxlKXt2YXIgbj1iKHRoaXMucHJvamVjdChpLmdldE5vcnRoRWFzdCgpLGUpLHRoaXMucHJvamVjdChpLmdldFNvdXRoV2VzdCgpLGUpKSxvPW4ubWluLnN1YnRyYWN0KHQubWluKSxzPW4ubWF4LnN1YnRyYWN0KHQubWF4KTtyZXR1cm4gbmV3IHgodGhpcy5fcmVib3VuZChvLngsLXMueCksdGhpcy5fcmVib3VuZChvLnksLXMueSkpfSxfcmVib3VuZDpmdW5jdGlvbih0LGkpe3JldHVybiB0K2k+MD9NYXRoLnJvdW5kKHQtaSkvMjpNYXRoLm1heCgwLE1hdGguY2VpbCh0KSktTWF0aC5tYXgoMCxNYXRoLmZsb29yKGkpKX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldE1pblpvb20oKSxlPXRoaXMuZ2V0TWF4Wm9vbSgpLG49amk/dGhpcy5vcHRpb25zLnpvb21TbmFwOjE7cmV0dXJuIG4mJih0PU1hdGgucm91bmQodC9uKSpuKSxNYXRoLm1heChpLE1hdGgubWluKGUsdCkpfSxfb25QYW5UcmFuc2l0aW9uU3RlcDpmdW5jdGlvbigpe3RoaXMuZmlyZSgibW92ZSIpfSxfb25QYW5UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dHQodGhpcy5fbWFwUGFuZSwibGVhZmxldC1wYW4tYW5pbSIpLHRoaXMuZmlyZSgibW92ZWVuZCIpfSxfdHJ5QW5pbWF0ZWRQYW46ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX3RydW5jKCk7cmV0dXJuISghMCE9PShpJiZpLmFuaW1hdGUpJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnMoZSkpJiYodGhpcy5wYW5CeShlLGkpLCEwKX0sX2NyZWF0ZUFuaW1Qcm94eTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3Byb3h5PUcoImRpdiIsImxlYWZsZXQtcHJveHkgbGVhZmxldC16b29tLWFuaW1hdGVkIik7dGhpcy5fcGFuZXMubWFwUGFuZS5hcHBlbmRDaGlsZCh0KSx0aGlzLm9uKCJ6b29tYW5pbSIsZnVuY3Rpb24odCl7dmFyIGk9Y2UsZT10aGlzLl9wcm94eS5zdHlsZVtpXTtydCh0aGlzLl9wcm94eSx0aGlzLnByb2plY3QodC5jZW50ZXIsdC56b29tKSx0aGlzLmdldFpvb21TY2FsZSh0Lnpvb20sMSkpLGU9PT10aGlzLl9wcm94eS5zdHlsZVtpXSYmdGhpcy5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSx0aGlzKSx0aGlzLm9uKCJsb2FkIG1vdmVlbmQiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRDZW50ZXIoKSxpPXRoaXMuZ2V0Wm9vbSgpO3J0KHRoaXMuX3Byb3h5LHRoaXMucHJvamVjdCh0LGkpLHRoaXMuZ2V0Wm9vbVNjYWxlKGksMSkpfSx0aGlzKSx0aGlzLl9vbigidW5sb2FkIix0aGlzLl9kZXN0cm95QW5pbVByb3h5LHRoaXMpfSxfZGVzdHJveUFuaW1Qcm94eTpmdW5jdGlvbigpe0sodGhpcy5fcHJveHkpLGRlbGV0ZSB0aGlzLl9wcm94eX0sX2NhdGNoVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt0aGlzLl9hbmltYXRpbmdab29tJiZ0LnByb3BlcnR5TmFtZS5pbmRleE9mKCJ0cmFuc2Zvcm0iKT49MCYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSxfbm90aGluZ1RvQW5pbWF0ZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVhZmxldC16b29tLWFuaW1hdGVkIikubGVuZ3RofSxfdHJ5QW5pbWF0ZWRab29tOmZ1bmN0aW9uKHQsaSxlKXtpZih0aGlzLl9hbmltYXRpbmdab29tKXJldHVybiEwO2lmKGU9ZXx8e30sIXRoaXMuX3pvb21BbmltYXRlZHx8ITE9PT1lLmFuaW1hdGV8fHRoaXMuX25vdGhpbmdUb0FuaW1hdGUoKXx8TWF0aC5hYnMoaS10aGlzLl96b29tKT50aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvblRocmVzaG9sZClyZXR1cm4hMTt2YXIgbj10aGlzLmdldFpvb21TY2FsZShpKSxvPXRoaXMuX2dldENlbnRlck9mZnNldCh0KS5fZGl2aWRlQnkoMS0xL24pO3JldHVybiEoITAhPT1lLmFuaW1hdGUmJiF0aGlzLmdldFNpemUoKS5jb250YWlucyhvKSkmJihmKGZ1bmN0aW9uKCl7dGhpcy5fbW92ZVN0YXJ0KCEwLCExKS5fYW5pbWF0ZVpvb20odCxpLCEwKX0sdGhpcyksITApfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCxpLG4sbyl7dGhpcy5fbWFwUGFuZSYmKG4mJih0aGlzLl9hbmltYXRpbmdab29tPSEwLHRoaXMuX2FuaW1hdGVUb0NlbnRlcj10LHRoaXMuX2FuaW1hdGVUb1pvb209aSxRKHRoaXMuX21hcFBhbmUsImxlYWZsZXQtem9vbS1hbmltIikpLHRoaXMuZmlyZSgiem9vbWFuaW0iLHtjZW50ZXI6dCx6b29tOmksbm9VcGRhdGU6b30pLHNldFRpbWVvdXQoZSh0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kLHRoaXMpLDI1MCkpfSxfb25ab29tVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZ1pvb20mJih0aGlzLl9tYXBQYW5lJiZ0dCh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXpvb20tYW5pbSIpLHRoaXMuX2FuaW1hdGluZ1pvb209ITEsdGhpcy5fbW92ZSh0aGlzLl9hbmltYXRlVG9DZW50ZXIsdGhpcy5fYW5pbWF0ZVRvWm9vbSksZihmdW5jdGlvbigpe3RoaXMuX21vdmVFbmQoITApfSx0aGlzKSl9fSksVGU9di5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJ0b3ByaWdodCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7bCh0aGlzLHQpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb259LHNldFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcDtyZXR1cm4gaSYmaS5yZW1vdmVDb250cm9sKHRoaXMpLHRoaXMub3B0aW9ucy5wb3NpdGlvbj10LGkmJmkuYWRkQ29udHJvbCh0aGlzKSx0aGlzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxhZGRUbzpmdW5jdGlvbih0KXt0aGlzLnJlbW92ZSgpLHRoaXMuX21hcD10O3ZhciBpPXRoaXMuX2NvbnRhaW5lcj10aGlzLm9uQWRkKHQpLGU9dGhpcy5nZXRQb3NpdGlvbigpLG49dC5fY29udHJvbENvcm5lcnNbZV07cmV0dXJuIFEoaSwibGVhZmxldC1jb250cm9sIiksLTEhPT1lLmluZGV4T2YoImJvdHRvbSIpP24uaW5zZXJ0QmVmb3JlKGksbi5maXJzdENoaWxkKTpuLmFwcGVuZENoaWxkKGkpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXA/KEsodGhpcy5fY29udGFpbmVyKSx0aGlzLm9uUmVtb3ZlJiZ0aGlzLm9uUmVtb3ZlKHRoaXMuX21hcCksdGhpcy5fbWFwPW51bGwsdGhpcyk6dGhpc30sX3JlZm9jdXNPbk1hcDpmdW5jdGlvbih0KXt0aGlzLl9tYXAmJnQmJnQuc2NyZWVuWD4wJiZ0LnNjcmVlblk+MCYmdGhpcy5fbWFwLmdldENvbnRhaW5lcigpLmZvY3VzKCl9fSksemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBUZSh0KX07YmUuaW5jbHVkZSh7YWRkQ29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRUbyh0aGlzKSx0aGlzfSxyZW1vdmVDb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbW92ZSgpLHRoaXN9LF9pbml0Q29udHJvbFBvczpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxvKXt2YXIgcz1lK3QrIiAiK2UrbztpW3Qrb109RygiZGl2IixzLG4pfXZhciBpPXRoaXMuX2NvbnRyb2xDb3JuZXJzPXt9LGU9ImxlYWZsZXQtIixuPXRoaXMuX2NvbnRyb2xDb250YWluZXI9RygiZGl2IixlKyJjb250cm9sLWNvbnRhaW5lciIsdGhpcy5fY29udGFpbmVyKTt0KCJ0b3AiLCJsZWZ0IiksdCgidG9wIiwicmlnaHQiKSx0KCJib3R0b20iLCJsZWZ0IiksdCgiYm90dG9tIiwicmlnaHQiKX0sX2NsZWFyQ29udHJvbFBvczpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9jb250cm9sQ29ybmVycylLKHRoaXMuX2NvbnRyb2xDb3JuZXJzW3RdKTtLKHRoaXMuX2NvbnRyb2xDb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250cm9sQ29ybmVycyxkZWxldGUgdGhpcy5fY29udHJvbENvbnRhaW5lcn19KTt2YXIgTWU9VGUuZXh0ZW5kKHtvcHRpb25zOntjb2xsYXBzZWQ6ITAscG9zaXRpb246InRvcHJpZ2h0IixhdXRvWkluZGV4OiEwLGhpZGVTaW5nbGVCYXNlOiExLHNvcnRMYXllcnM6ITEsc29ydEZ1bmN0aW9uOmZ1bmN0aW9uKHQsaSxlLG4pe3JldHVybiBlPG4/LTE6bjxlPzE6MH19LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpLGUpe2wodGhpcyxlKSx0aGlzLl9sYXllckNvbnRyb2xJbnB1dHM9W10sdGhpcy5fbGF5ZXJzPVtdLHRoaXMuX2xhc3RaSW5kZXg9MCx0aGlzLl9oYW5kbGluZ0NsaWNrPSExO2Zvcih2YXIgbiBpbiB0KXRoaXMuX2FkZExheWVyKHRbbl0sbik7Zm9yKG4gaW4gaSl0aGlzLl9hZGRMYXllcihpW25dLG4sITApfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9pbml0TGF5b3V0KCksdGhpcy5fdXBkYXRlKCksdGhpcy5fbWFwPXQsdC5vbigiem9vbWVuZCIsdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycyx0aGlzKTtmb3IodmFyIGk9MDtpPHRoaXMuX2xheWVycy5sZW5ndGg7aSsrKXRoaXMuX2xheWVyc1tpXS5sYXllci5vbigiYWRkIHJlbW92ZSIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKTtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gVGUucHJvdG90eXBlLmFkZFRvLmNhbGwodGhpcyx0KSx0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoInpvb21lbmQiLHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMsdGhpcyk7Zm9yKHZhciB0PTA7dDx0aGlzLl9sYXllcnMubGVuZ3RoO3QrKyl0aGlzLl9sYXllcnNbdF0ubGF5ZXIub2ZmKCJhZGQgcmVtb3ZlIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpfSxhZGRCYXNlTGF5ZXI6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5fYWRkTGF5ZXIodCxpKSx0aGlzLl9tYXA/dGhpcy5fdXBkYXRlKCk6dGhpc30sYWRkT3ZlcmxheTpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl9hZGRMYXllcih0LGksITApLHRoaXMuX21hcD90aGlzLl91cGRhdGUoKTp0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt0Lm9mZigiYWRkIHJlbW92ZSIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKTt2YXIgaT10aGlzLl9nZXRMYXllcihuKHQpKTtyZXR1cm4gaSYmdGhpcy5fbGF5ZXJzLnNwbGljZSh0aGlzLl9sYXllcnMuaW5kZXhPZihpKSwxKSx0aGlzLl9tYXA/dGhpcy5fdXBkYXRlKCk6dGhpc30sZXhwYW5kOmZ1bmN0aW9uKCl7USh0aGlzLl9jb250YWluZXIsImxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQiKSx0aGlzLl9zZWN0aW9uLnN0eWxlLmhlaWdodD1udWxsO3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkueS0odGhpcy5fY29udGFpbmVyLm9mZnNldFRvcCs1MCk7cmV0dXJuIHQ8dGhpcy5fc2VjdGlvbi5jbGllbnRIZWlnaHQ/KFEodGhpcy5fc2VjdGlvbiwibGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXIiKSx0aGlzLl9zZWN0aW9uLnN0eWxlLmhlaWdodD10KyJweCIpOnR0KHRoaXMuX3NlY3Rpb24sImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2Nyb2xsYmFyIiksdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycygpLHRoaXN9LGNvbGxhcHNlOmZ1bmN0aW9uKCl7cmV0dXJuIHR0KHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCIpLHRoaXN9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9ImxlYWZsZXQtY29udHJvbC1sYXllcnMiLGk9dGhpcy5fY29udGFpbmVyPUcoImRpdiIsdCksZT10aGlzLm9wdGlvbnMuY29sbGFwc2VkO2kuc2V0QXR0cmlidXRlKCJhcmlhLWhhc3BvcHVwIiwhMCksd3QoaSkseHQoaSk7dmFyIG49dGhpcy5fc2VjdGlvbj1HKCJzZWN0aW9uIix0KyItbGlzdCIpO2UmJih0aGlzLl9tYXAub24oImNsaWNrIix0aGlzLmNvbGxhcHNlLHRoaXMpLHppfHxtdChpLHttb3VzZWVudGVyOnRoaXMuZXhwYW5kLG1vdXNlbGVhdmU6dGhpcy5jb2xsYXBzZX0sdGhpcykpO3ZhciBvPXRoaXMuX2xheWVyc0xpbms9RygiYSIsdCsiLXRvZ2dsZSIsaSk7by5ocmVmPSIjIixvLnRpdGxlPSJMYXllcnMiLHFpPyhtdChvLCJjbGljayIsTHQpLG10KG8sImNsaWNrIix0aGlzLmV4cGFuZCx0aGlzKSk6bXQobywiZm9jdXMiLHRoaXMuZXhwYW5kLHRoaXMpLGV8fHRoaXMuZXhwYW5kKCksdGhpcy5fYmFzZUxheWVyc0xpc3Q9RygiZGl2Iix0KyItYmFzZSIsbiksdGhpcy5fc2VwYXJhdG9yPUcoImRpdiIsdCsiLXNlcGFyYXRvciIsbiksdGhpcy5fb3ZlcmxheXNMaXN0PUcoImRpdiIsdCsiLW92ZXJsYXlzIixuKSxpLmFwcGVuZENoaWxkKG4pfSxfZ2V0TGF5ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBpPTA7aTx0aGlzLl9sYXllcnMubGVuZ3RoO2krKylpZih0aGlzLl9sYXllcnNbaV0mJm4odGhpcy5fbGF5ZXJzW2ldLmxheWVyKT09PXQpcmV0dXJuIHRoaXMuX2xheWVyc1tpXX0sX2FkZExheWVyOmZ1bmN0aW9uKHQsaSxuKXt0aGlzLl9tYXAmJnQub24oImFkZCByZW1vdmUiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyksdGhpcy5fbGF5ZXJzLnB1c2goe2xheWVyOnQsbmFtZTppLG92ZXJsYXk6bn0pLHRoaXMub3B0aW9ucy5zb3J0TGF5ZXJzJiZ0aGlzLl9sYXllcnMuc29ydChlKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMub3B0aW9ucy5zb3J0RnVuY3Rpb24odC5sYXllcixpLmxheWVyLHQubmFtZSxpLm5hbWUpfSx0aGlzKSksdGhpcy5vcHRpb25zLmF1dG9aSW5kZXgmJnQuc2V0WkluZGV4JiYodGhpcy5fbGFzdFpJbmRleCsrLHQuc2V0WkluZGV4KHRoaXMuX2xhc3RaSW5kZXgpKSx0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NvbnRhaW5lcilyZXR1cm4gdGhpcztZKHRoaXMuX2Jhc2VMYXllcnNMaXN0KSxZKHRoaXMuX292ZXJsYXlzTGlzdCksdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzPVtdO3ZhciB0LGksZSxuLG89MDtmb3IoZT0wO2U8dGhpcy5fbGF5ZXJzLmxlbmd0aDtlKyspbj10aGlzLl9sYXllcnNbZV0sdGhpcy5fYWRkSXRlbShuKSxpPWl8fG4ub3ZlcmxheSx0PXR8fCFuLm92ZXJsYXksbys9bi5vdmVybGF5PzA6MTtyZXR1cm4gdGhpcy5vcHRpb25zLmhpZGVTaW5nbGVCYXNlJiYodD10JiZvPjEsdGhpcy5fYmFzZUxheWVyc0xpc3Quc3R5bGUuZGlzcGxheT10PyIiOiJub25lIiksdGhpcy5fc2VwYXJhdG9yLnN0eWxlLmRpc3BsYXk9aSYmdD8iIjoibm9uZSIsdGhpc30sX29uTGF5ZXJDaGFuZ2U6ZnVuY3Rpb24odCl7dGhpcy5faGFuZGxpbmdDbGlja3x8dGhpcy5fdXBkYXRlKCk7dmFyIGk9dGhpcy5fZ2V0TGF5ZXIobih0LnRhcmdldCkpLGU9aS5vdmVybGF5PyJhZGQiPT09dC50eXBlPyJvdmVybGF5YWRkIjoib3ZlcmxheXJlbW92ZSI6ImFkZCI9PT10LnR5cGU/ImJhc2VsYXllcmNoYW5nZSI6bnVsbDtlJiZ0aGlzLl9tYXAuZmlyZShlLGkpfSxfY3JlYXRlUmFkaW9FbGVtZW50OmZ1bmN0aW9uKHQsaSl7dmFyIGU9JzxpbnB1dCB0eXBlPSJyYWRpbyIgY2xhc3M9ImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3IiIG5hbWU9IicrdCsnIicrKGk/JyBjaGVja2VkPSJjaGVja2VkIic6IiIpKyIvPiIsbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gbi5pbm5lckhUTUw9ZSxuLmZpcnN0Q2hpbGR9LF9hZGRJdGVtOmZ1bmN0aW9uKHQpe3ZhciBpLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKSxvPXRoaXMuX21hcC5oYXNMYXllcih0LmxheWVyKTt0Lm92ZXJsYXk/KChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnR5cGU9ImNoZWNrYm94IixpLmNsYXNzTmFtZT0ibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvciIsaS5kZWZhdWx0Q2hlY2tlZD1vKTppPXRoaXMuX2NyZWF0ZVJhZGlvRWxlbWVudCgibGVhZmxldC1iYXNlLWxheWVycyIsbyksdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLnB1c2goaSksaS5sYXllcklkPW4odC5sYXllciksbXQoaSwiY2xpY2siLHRoaXMuX29uSW5wdXRDbGljayx0aGlzKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7cy5pbm5lckhUTUw9IiAiK3QubmFtZTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5hcHBlbmRDaGlsZChyKSxyLmFwcGVuZENoaWxkKGkpLHIuYXBwZW5kQ2hpbGQocyksKHQub3ZlcmxheT90aGlzLl9vdmVybGF5c0xpc3Q6dGhpcy5fYmFzZUxheWVyc0xpc3QpLmFwcGVuZENoaWxkKGUpLHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMoKSxlfSxfb25JbnB1dENsaWNrOmZ1bmN0aW9uKCl7dmFyIHQsaSxlPXRoaXMuX2xheWVyQ29udHJvbElucHV0cyxuPVtdLG89W107dGhpcy5faGFuZGxpbmdDbGljaz0hMDtmb3IodmFyIHM9ZS5sZW5ndGgtMTtzPj0wO3MtLSl0PWVbc10saT10aGlzLl9nZXRMYXllcih0LmxheWVySWQpLmxheWVyLHQuY2hlY2tlZD9uLnB1c2goaSk6dC5jaGVja2VkfHxvLnB1c2goaSk7Zm9yKHM9MDtzPG8ubGVuZ3RoO3MrKyl0aGlzLl9tYXAuaGFzTGF5ZXIob1tzXSkmJnRoaXMuX21hcC5yZW1vdmVMYXllcihvW3NdKTtmb3Iocz0wO3M8bi5sZW5ndGg7cysrKXRoaXMuX21hcC5oYXNMYXllcihuW3NdKXx8dGhpcy5fbWFwLmFkZExheWVyKG5bc10pO3RoaXMuX2hhbmRsaW5nQ2xpY2s9ITEsdGhpcy5fcmVmb2N1c09uTWFwKCl9LF9jaGVja0Rpc2FibGVkTGF5ZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGksZT10aGlzLl9sYXllckNvbnRyb2xJbnB1dHMsbj10aGlzLl9tYXAuZ2V0Wm9vbSgpLG89ZS5sZW5ndGgtMTtvPj0wO28tLSl0PWVbb10saT10aGlzLl9nZXRMYXllcih0LmxheWVySWQpLmxheWVyLHQuZGlzYWJsZWQ9dm9pZCAwIT09aS5vcHRpb25zLm1pblpvb20mJm48aS5vcHRpb25zLm1pblpvb218fHZvaWQgMCE9PWkub3B0aW9ucy5tYXhab29tJiZuPmkub3B0aW9ucy5tYXhab29tfSxfZXhwYW5kSWZOb3RDb2xsYXBzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYhdGhpcy5vcHRpb25zLmNvbGxhcHNlZCYmdGhpcy5leHBhbmQoKSx0aGlzfSxfZXhwYW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhwYW5kKCl9LF9jb2xsYXBzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxhcHNlKCl9fSksQ2U9VGUuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjoidG9wbGVmdCIsem9vbUluVGV4dDoiKyIsem9vbUluVGl0bGU6Ilpvb20gaW4iLHpvb21PdXRUZXh0OiImI3gyMjEyOyIsem9vbU91dFRpdGxlOiJab29tIG91dCJ9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBpPSJsZWFmbGV0LWNvbnRyb2wtem9vbSIsZT1HKCJkaXYiLGkrIiBsZWFmbGV0LWJhciIpLG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKG4uem9vbUluVGV4dCxuLnpvb21JblRpdGxlLGkrIi1pbiIsZSx0aGlzLl96b29tSW4pLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKG4uem9vbU91dFRleHQsbi56b29tT3V0VGl0bGUsaSsiLW91dCIsZSx0aGlzLl96b29tT3V0KSx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHQub24oInpvb21lbmQgem9vbWxldmVsc2NoYW5nZSIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyksZX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYoInpvb21lbmQgem9vbWxldmVsc2NoYW5nZSIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWQ9ITAsdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0aGlzfSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0aGlzfSxfem9vbUluOmZ1bmN0aW9uKHQpeyF0aGlzLl9kaXNhYmxlZCYmdGhpcy5fbWFwLl96b29tPHRoaXMuX21hcC5nZXRNYXhab29tKCkmJnRoaXMuX21hcC56b29tSW4odGhpcy5fbWFwLm9wdGlvbnMuem9vbURlbHRhKih0LnNoaWZ0S2V5PzM6MSkpfSxfem9vbU91dDpmdW5jdGlvbih0KXshdGhpcy5fZGlzYWJsZWQmJnRoaXMuX21hcC5fem9vbT50aGlzLl9tYXAuZ2V0TWluWm9vbSgpJiZ0aGlzLl9tYXAuem9vbU91dCh0aGlzLl9tYXAub3B0aW9ucy56b29tRGVsdGEqKHQuc2hpZnRLZXk/MzoxKSl9LF9jcmVhdGVCdXR0b246ZnVuY3Rpb24odCxpLGUsbixvKXt2YXIgcz1HKCJhIixlLG4pO3JldHVybiBzLmlubmVySFRNTD10LHMuaHJlZj0iIyIscy50aXRsZT1pLHMuc2V0QXR0cmlidXRlKCJyb2xlIiwiYnV0dG9uIikscy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGkpLHd0KHMpLG10KHMsImNsaWNrIixMdCksbXQocywiY2xpY2siLG8sdGhpcyksbXQocywiY2xpY2siLHRoaXMuX3JlZm9jdXNPbk1hcCx0aGlzKSxzfSxfdXBkYXRlRGlzYWJsZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsaT0ibGVhZmxldC1kaXNhYmxlZCI7dHQodGhpcy5fem9vbUluQnV0dG9uLGkpLHR0KHRoaXMuX3pvb21PdXRCdXR0b24saSksKHRoaXMuX2Rpc2FibGVkfHx0Ll96b29tPT09dC5nZXRNaW5ab29tKCkpJiZRKHRoaXMuX3pvb21PdXRCdXR0b24saSksKHRoaXMuX2Rpc2FibGVkfHx0Ll96b29tPT09dC5nZXRNYXhab29tKCkpJiZRKHRoaXMuX3pvb21JbkJ1dHRvbixpKX19KTtiZS5tZXJnZU9wdGlvbnMoe3pvb21Db250cm9sOiEwfSksYmUuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuem9vbUNvbnRyb2wmJih0aGlzLnpvb21Db250cm9sPW5ldyBDZSx0aGlzLmFkZENvbnRyb2wodGhpcy56b29tQ29udHJvbCkpfSk7dmFyIFNlPVRlLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246ImJvdHRvbWxlZnQiLG1heFdpZHRoOjEwMCxtZXRyaWM6ITAsaW1wZXJpYWw6ITB9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBpPUcoImRpdiIsImxlYWZsZXQtY29udHJvbC1zY2FsZSIpLGU9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLl9hZGRTY2FsZXMoZSwibGVhZmxldC1jb250cm9sLXNjYWxlLWxpbmUiLGkpLHQub24oZS51cGRhdGVXaGVuSWRsZT8ibW92ZWVuZCI6Im1vdmUiLHRoaXMuX3VwZGF0ZSx0aGlzKSx0LndoZW5SZWFkeSh0aGlzLl91cGRhdGUsdGhpcyksaX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYodGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlPyJtb3ZlZW5kIjoibW92ZSIsdGhpcy5fdXBkYXRlLHRoaXMpfSxfYWRkU2NhbGVzOmZ1bmN0aW9uKHQsaSxlKXt0Lm1ldHJpYyYmKHRoaXMuX21TY2FsZT1HKCJkaXYiLGksZSkpLHQuaW1wZXJpYWwmJih0aGlzLl9pU2NhbGU9RygiZGl2IixpLGUpKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcCxpPXQuZ2V0U2l6ZSgpLnkvMixlPXQuZGlzdGFuY2UodC5jb250YWluZXJQb2ludFRvTGF0TG5nKFswLGldKSx0LmNvbnRhaW5lclBvaW50VG9MYXRMbmcoW3RoaXMub3B0aW9ucy5tYXhXaWR0aCxpXSkpO3RoaXMuX3VwZGF0ZVNjYWxlcyhlKX0sX3VwZGF0ZVNjYWxlczpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMubWV0cmljJiZ0JiZ0aGlzLl91cGRhdGVNZXRyaWModCksdGhpcy5vcHRpb25zLmltcGVyaWFsJiZ0JiZ0aGlzLl91cGRhdGVJbXBlcmlhbCh0KX0sX3VwZGF0ZU1ldHJpYzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXRSb3VuZE51bSh0KSxlPWk8MWUzP2krIiBtIjppLzFlMysiIGttIjt0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9tU2NhbGUsZSxpL3QpfSxfdXBkYXRlSW1wZXJpYWw6ZnVuY3Rpb24odCl7dmFyIGksZSxuLG89My4yODA4Mzk5KnQ7bz41MjgwPyhpPW8vNTI4MCxlPXRoaXMuX2dldFJvdW5kTnVtKGkpLHRoaXMuX3VwZGF0ZVNjYWxlKHRoaXMuX2lTY2FsZSxlKyIgbWkiLGUvaSkpOihuPXRoaXMuX2dldFJvdW5kTnVtKG8pLHRoaXMuX3VwZGF0ZVNjYWxlKHRoaXMuX2lTY2FsZSxuKyIgZnQiLG4vbykpfSxfdXBkYXRlU2NhbGU6ZnVuY3Rpb24odCxpLGUpe3Quc3R5bGUud2lkdGg9TWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMubWF4V2lkdGgqZSkrInB4Iix0LmlubmVySFRNTD1pfSxfZ2V0Um91bmROdW06ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5wb3coMTAsKE1hdGguZmxvb3IodCkrIiIpLmxlbmd0aC0xKSxlPXQvaTtyZXR1cm4gZT1lPj0xMD8xMDplPj01PzU6ZT49Mz8zOmU+PTI/MjoxLGkqZX19KSxaZT1UZS5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJib3R0b21yaWdodCIscHJlZml4Oic8YSBocmVmPSJodHRwOi8vbGVhZmxldGpzLmNvbSIgdGl0bGU9IkEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcyI+TGVhZmxldDwvYT4nfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2wodGhpcyx0KSx0aGlzLl9hdHRyaWJ1dGlvbnM9e319LG9uQWRkOmZ1bmN0aW9uKHQpe3QuYXR0cmlidXRpb25Db250cm9sPXRoaXMsdGhpcy5fY29udGFpbmVyPUcoImRpdiIsImxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbiIpLHd0KHRoaXMuX2NvbnRhaW5lcik7Zm9yKHZhciBpIGluIHQuX2xheWVycyl0Ll9sYXllcnNbaV0uZ2V0QXR0cmlidXRpb24mJnRoaXMuYWRkQXR0cmlidXRpb24odC5fbGF5ZXJzW2ldLmdldEF0dHJpYnV0aW9uKCkpO3JldHVybiB0aGlzLl91cGRhdGUoKSx0aGlzLl9jb250YWluZXJ9LHNldFByZWZpeDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnByZWZpeD10LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LGFkZEF0dHJpYnV0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0Pyh0aGlzLl9hdHRyaWJ1dGlvbnNbdF18fCh0aGlzLl9hdHRyaWJ1dGlvbnNbdF09MCksdGhpcy5fYXR0cmlidXRpb25zW3RdKyssdGhpcy5fdXBkYXRlKCksdGhpcyk6dGhpc30scmVtb3ZlQXR0cmlidXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KHRoaXMuX2F0dHJpYnV0aW9uc1t0XSYmKHRoaXMuX2F0dHJpYnV0aW9uc1t0XS0tLHRoaXMuX3VwZGF0ZSgpKSx0aGlzKTp0aGlzfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXt2YXIgdD1bXTtmb3IodmFyIGkgaW4gdGhpcy5fYXR0cmlidXRpb25zKXRoaXMuX2F0dHJpYnV0aW9uc1tpXSYmdC5wdXNoKGkpO3ZhciBlPVtdO3RoaXMub3B0aW9ucy5wcmVmaXgmJmUucHVzaCh0aGlzLm9wdGlvbnMucHJlZml4KSx0Lmxlbmd0aCYmZS5wdXNoKHQuam9pbigiLCAiKSksdGhpcy5fY29udGFpbmVyLmlubmVySFRNTD1lLmpvaW4oIiB8ICIpfX19KTtiZS5tZXJnZU9wdGlvbnMoe2F0dHJpYnV0aW9uQ29udHJvbDohMH0pLGJlLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbCYmKG5ldyBaZSkuYWRkVG8odGhpcyl9KTtUZS5MYXllcnM9TWUsVGUuWm9vbT1DZSxUZS5TY2FsZT1TZSxUZS5BdHRyaWJ1dGlvbj1aZSx6ZS5sYXllcnM9ZnVuY3Rpb24odCxpLGUpe3JldHVybiBuZXcgTWUodCxpLGUpfSx6ZS56b29tPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ2UodCl9LHplLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgU2UodCl9LHplLmF0dHJpYnV0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWmUodCl9O3ZhciBFZT12LmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dH0sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWQ/dGhpczoodGhpcy5fZW5hYmxlZD0hMCx0aGlzLmFkZEhvb2tzKCksdGhpcyl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZD8odGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlbW92ZUhvb2tzKCksdGhpcyk6dGhpc30sZW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH19KTtFZS5hZGRUbz1mdW5jdGlvbih0LGkpe3JldHVybiB0LmFkZEhhbmRsZXIoaSx0aGlzKSx0aGlzfTt2YXIga2UsQmU9e0V2ZW50czpsaX0sQWU9cWk/InRvdWNoc3RhcnQgbW91c2Vkb3duIjoibW91c2Vkb3duIixJZT17bW91c2Vkb3duOiJtb3VzZXVwIix0b3VjaHN0YXJ0OiJ0b3VjaGVuZCIscG9pbnRlcmRvd246InRvdWNoZW5kIixNU1BvaW50ZXJEb3duOiJ0b3VjaGVuZCJ9LE9lPXttb3VzZWRvd246Im1vdXNlbW92ZSIsdG91Y2hzdGFydDoidG91Y2htb3ZlIixwb2ludGVyZG93bjoidG91Y2htb3ZlIixNU1BvaW50ZXJEb3duOiJ0b3VjaG1vdmUifSxSZT1jaS5leHRlbmQoe29wdGlvbnM6e2NsaWNrVG9sZXJhbmNlOjN9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpLGUsbil7bCh0aGlzLG4pLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9kcmFnU3RhcnRUYXJnZXQ9aXx8dCx0aGlzLl9wcmV2ZW50T3V0bGluZT1lfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkfHwobXQodGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0LEFlLHRoaXMuX29uRG93bix0aGlzKSx0aGlzLl9lbmFibGVkPSEwKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQmJihSZS5fZHJhZ2dpbmc9PT10aGlzJiZ0aGlzLmZpbmlzaERyYWcoKSxmdCh0aGlzLl9kcmFnU3RhcnRUYXJnZXQsQWUsdGhpcy5fb25Eb3duLHRoaXMpLHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5fbW92ZWQ9ITEpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe2lmKCF0Ll9zaW11bGF0ZWQmJnRoaXMuX2VuYWJsZWQmJih0aGlzLl9tb3ZlZD0hMSwhJCh0aGlzLl9lbGVtZW50LCJsZWFmbGV0LXpvb20tYW5pbSIpJiYhKFJlLl9kcmFnZ2luZ3x8dC5zaGlmdEtleXx8MSE9PXQud2hpY2gmJjEhPT10LmJ1dHRvbiYmIXQudG91Y2hlc3x8KFJlLl9kcmFnZ2luZz10aGlzLHRoaXMuX3ByZXZlbnRPdXRsaW5lJiZjdCh0aGlzLl9lbGVtZW50KSx1dCgpLGZpKCksdGhpcy5fbW92aW5nKSkpKXt0aGlzLmZpcmUoImRvd24iKTt2YXIgaT10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQsZT1kdCh0aGlzLl9lbGVtZW50KTt0aGlzLl9zdGFydFBvaW50PW5ldyB4KGkuY2xpZW50WCxpLmNsaWVudFkpLHRoaXMuX3BhcmVudFNjYWxlPXB0KGUpLG10KGRvY3VtZW50LE9lW3QudHlwZV0sdGhpcy5fb25Nb3ZlLHRoaXMpLG10KGRvY3VtZW50LEllW3QudHlwZV0sdGhpcy5fb25VcCx0aGlzKX19LF9vbk1vdmU6ZnVuY3Rpb24odCl7aWYoIXQuX3NpbXVsYXRlZCYmdGhpcy5fZW5hYmxlZClpZih0LnRvdWNoZXMmJnQudG91Y2hlcy5sZW5ndGg+MSl0aGlzLl9tb3ZlZD0hMDtlbHNle3ZhciBpPXQudG91Y2hlcyYmMT09PXQudG91Y2hlcy5sZW5ndGg/dC50b3VjaGVzWzBdOnQsZT1uZXcgeChpLmNsaWVudFgsaS5jbGllbnRZKS5fc3VidHJhY3QodGhpcy5fc3RhcnRQb2ludCk7KGUueHx8ZS55KSYmKE1hdGguYWJzKGUueCkrTWF0aC5hYnMoZS55KTx0aGlzLm9wdGlvbnMuY2xpY2tUb2xlcmFuY2V8fChlLngvPXRoaXMuX3BhcmVudFNjYWxlLngsZS55Lz10aGlzLl9wYXJlbnRTY2FsZS55LFB0KHQpLHRoaXMuX21vdmVkfHwodGhpcy5maXJlKCJkcmFnc3RhcnQiKSx0aGlzLl9tb3ZlZD0hMCx0aGlzLl9zdGFydFBvcz1odCh0aGlzLl9lbGVtZW50KS5zdWJ0cmFjdChlKSxRKGRvY3VtZW50LmJvZHksImxlYWZsZXQtZHJhZ2dpbmciKSx0aGlzLl9sYXN0VGFyZ2V0PXQudGFyZ2V0fHx0LnNyY0VsZW1lbnQsd2luZG93LlNWR0VsZW1lbnRJbnN0YW5jZSYmdGhpcy5fbGFzdFRhcmdldCBpbnN0YW5jZW9mIFNWR0VsZW1lbnRJbnN0YW5jZSYmKHRoaXMuX2xhc3RUYXJnZXQ9dGhpcy5fbGFzdFRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksUSh0aGlzLl9sYXN0VGFyZ2V0LCJsZWFmbGV0LWRyYWctdGFyZ2V0IikpLHRoaXMuX25ld1Bvcz10aGlzLl9zdGFydFBvcy5hZGQoZSksdGhpcy5fbW92aW5nPSEwLGcodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuX2xhc3RFdmVudD10LHRoaXMuX2FuaW1SZXF1ZXN0PWYodGhpcy5fdXBkYXRlUG9zaXRpb24sdGhpcywhMCkpKX19LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RFdmVudH07dGhpcy5maXJlKCJwcmVkcmFnIix0KSxhdCh0aGlzLl9lbGVtZW50LHRoaXMuX25ld1BvcyksdGhpcy5maXJlKCJkcmFnIix0KX0sX29uVXA6ZnVuY3Rpb24odCl7IXQuX3NpbXVsYXRlZCYmdGhpcy5fZW5hYmxlZCYmdGhpcy5maW5pc2hEcmFnKCl9LGZpbmlzaERyYWc6ZnVuY3Rpb24oKXt0dChkb2N1bWVudC5ib2R5LCJsZWFmbGV0LWRyYWdnaW5nIiksdGhpcy5fbGFzdFRhcmdldCYmKHR0KHRoaXMuX2xhc3RUYXJnZXQsImxlYWZsZXQtZHJhZy10YXJnZXQiKSx0aGlzLl9sYXN0VGFyZ2V0PW51bGwpO2Zvcih2YXIgdCBpbiBPZSlmdChkb2N1bWVudCxPZVt0XSx0aGlzLl9vbk1vdmUsdGhpcyksZnQoZG9jdW1lbnQsSWVbdF0sdGhpcy5fb25VcCx0aGlzKTtsdCgpLGdpKCksdGhpcy5fbW92ZWQmJnRoaXMuX21vdmluZyYmKGcodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuZmlyZSgiZHJhZ2VuZCIse2Rpc3RhbmNlOnRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKX0pKSx0aGlzLl9tb3Zpbmc9ITEsUmUuX2RyYWdnaW5nPSExfX0pLE5lPShPYmplY3QuZnJlZXplfHxPYmplY3QpKHtzaW1wbGlmeTpadCxwb2ludFRvU2VnbWVudERpc3RhbmNlOkV0LGNsb3Nlc3RQb2ludE9uU2VnbWVudDpmdW5jdGlvbih0LGksZSl7cmV0dXJuIER0KHQsaSxlKX0sY2xpcFNlZ21lbnQ6SXQsX2dldEVkZ2VJbnRlcnNlY3Rpb246T3QsX2dldEJpdENvZGU6UnQsX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50OkR0LGlzRmxhdDpqdCxfZmxhdDpXdH0pLERlPShPYmplY3QuZnJlZXplfHxPYmplY3QpKHtjbGlwUG9seWdvbjpIdH0pLGplPXtwcm9qZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeCh0LmxuZyx0LmxhdCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE0odC55LHQueCl9LGJvdW5kczpuZXcgUChbLTE4MCwtOTBdLFsxODAsOTBdKX0sV2U9e1I6NjM3ODEzNyxSX01JTk9SOjYzNTY3NTIuMzE0MjQ1MTc5LGJvdW5kczpuZXcgUChbLTIwMDM3NTA4LjM0Mjc5LC0xNTQ5NjU3MC43Mzk3Ml0sWzIwMDM3NTA4LjM0Mjc5LDE4NzY0NjU2LjIzMTM4XSkscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgaT1NYXRoLlBJLzE4MCxlPXRoaXMuUixuPXQubGF0Kmksbz10aGlzLlJfTUlOT1IvZSxzPU1hdGguc3FydCgxLW8qbykscj1zKk1hdGguc2luKG4pLGE9TWF0aC50YW4oTWF0aC5QSS80LW4vMikvTWF0aC5wb3coKDEtcikvKDErcikscy8yKTtyZXR1cm4gbj0tZSpNYXRoLmxvZyhNYXRoLm1heChhLDFlLTEwKSksbmV3IHgodC5sbmcqaSplLG4pfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLGU9MTgwL01hdGguUEksbj10aGlzLlIsbz10aGlzLlJfTUlOT1IvbixzPU1hdGguc3FydCgxLW8qbykscj1NYXRoLmV4cCgtdC55L24pLGE9TWF0aC5QSS8yLTIqTWF0aC5hdGFuKHIpLGg9MCx1PS4xO2g8MTUmJk1hdGguYWJzKHUpPjFlLTc7aCsrKWk9cypNYXRoLnNpbihhKSxpPU1hdGgucG93KCgxLWkpLygxK2kpLHMvMiksYSs9dT1NYXRoLlBJLzItMipNYXRoLmF0YW4ocippKS1hO3JldHVybiBuZXcgTShhKmUsdC54KmUvbil9fSxIZT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7TG9uTGF0OmplLE1lcmNhdG9yOldlLFNwaGVyaWNhbE1lcmNhdG9yOm1pfSksRmU9aSh7fSxwaSx7Y29kZToiRVBTRzozMzk1Iixwcm9qZWN0aW9uOldlLHRyYW5zZm9ybWF0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9LjUvKE1hdGguUEkqV2UuUik7cmV0dXJuIFoodCwuNSwtdCwuNSl9KCl9KSxVZT1pKHt9LHBpLHtjb2RlOiJFUFNHOjQzMjYiLHByb2plY3Rpb246amUsdHJhbnNmb3JtYXRpb246WigxLzE4MCwxLC0xLzE4MCwuNSl9KSxWZT1pKHt9LGRpLHtwcm9qZWN0aW9uOmplLHRyYW5zZm9ybWF0aW9uOlooMSwwLC0xLDApLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMn0sZGlzdGFuY2U6ZnVuY3Rpb24odCxpKXt2YXIgZT1pLmxuZy10LmxuZyxuPWkubGF0LXQubGF0O3JldHVybiBNYXRoLnNxcnQoZSplK24qbil9LGluZmluaXRlOiEwfSk7ZGkuRWFydGg9cGksZGkuRVBTRzMzOTU9RmUsZGkuRVBTRzM4NTc9eWksZGkuRVBTRzkwMDkxMz14aSxkaS5FUFNHNDMyNj1VZSxkaS5TaW1wbGU9VmU7dmFyIHFlPWNpLmV4dGVuZCh7b3B0aW9uczp7cGFuZToib3ZlcmxheVBhbmUiLGF0dHJpYnV0aW9uOm51bGwsYnViYmxpbmdNb3VzZUV2ZW50czohMH0sYWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkTGF5ZXIodGhpcyksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVtb3ZlRnJvbSh0aGlzLl9tYXB8fHRoaXMuX21hcFRvQWRkKX0scmVtb3ZlRnJvbTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5yZW1vdmVMYXllcih0aGlzKSx0aGlzfSxnZXRQYW5lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuZ2V0UGFuZSh0P3RoaXMub3B0aW9uc1t0XXx8dDp0aGlzLm9wdGlvbnMucGFuZSl9LGFkZEludGVyYWN0aXZlVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuX3RhcmdldHNbbih0KV09dGhpcyx0aGlzfSxyZW1vdmVJbnRlcmFjdGl2ZVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMuX21hcC5fdGFyZ2V0c1tuKHQpXSx0aGlzfSxnZXRBdHRyaWJ1dGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRpb259LF9sYXllckFkZDpmdW5jdGlvbih0KXt2YXIgaT10LnRhcmdldDtpZihpLmhhc0xheWVyKHRoaXMpKXtpZih0aGlzLl9tYXA9aSx0aGlzLl96b29tQW5pbWF0ZWQ9aS5fem9vbUFuaW1hdGVkLHRoaXMuZ2V0RXZlbnRzKXt2YXIgZT10aGlzLmdldEV2ZW50cygpO2kub24oZSx0aGlzKSx0aGlzLm9uY2UoInJlbW92ZSIsZnVuY3Rpb24oKXtpLm9mZihlLHRoaXMpfSx0aGlzKX10aGlzLm9uQWRkKGkpLHRoaXMuZ2V0QXR0cmlidXRpb24mJmkuYXR0cmlidXRpb25Db250cm9sJiZpLmF0dHJpYnV0aW9uQ29udHJvbC5hZGRBdHRyaWJ1dGlvbih0aGlzLmdldEF0dHJpYnV0aW9uKCkpLHRoaXMuZmlyZSgiYWRkIiksaS5maXJlKCJsYXllcmFkZCIse2xheWVyOnRoaXN9KX19fSk7YmUuaW5jbHVkZSh7YWRkTGF5ZXI6ZnVuY3Rpb24odCl7aWYoIXQuX2xheWVyQWRkKXRocm93IG5ldyBFcnJvcigiVGhlIHByb3ZpZGVkIG9iamVjdCBpcyBub3QgYSBMYXllci4iKTt2YXIgaT1uKHQpO3JldHVybiB0aGlzLl9sYXllcnNbaV0/dGhpczoodGhpcy5fbGF5ZXJzW2ldPXQsdC5fbWFwVG9BZGQ9dGhpcyx0LmJlZm9yZUFkZCYmdC5iZWZvcmVBZGQodGhpcyksdGhpcy53aGVuUmVhZHkodC5fbGF5ZXJBZGQsdCksdGhpcyl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBpPW4odCk7cmV0dXJuIHRoaXMuX2xheWVyc1tpXT8odGhpcy5fbG9hZGVkJiZ0Lm9uUmVtb3ZlKHRoaXMpLHQuZ2V0QXR0cmlidXRpb24mJnRoaXMuYXR0cmlidXRpb25Db250cm9sJiZ0aGlzLmF0dHJpYnV0aW9uQ29udHJvbC5yZW1vdmVBdHRyaWJ1dGlvbih0LmdldEF0dHJpYnV0aW9uKCkpLGRlbGV0ZSB0aGlzLl9sYXllcnNbaV0sdGhpcy5fbG9hZGVkJiYodGhpcy5maXJlKCJsYXllcnJlbW92ZSIse2xheWVyOnR9KSx0LmZpcmUoInJlbW92ZSIpKSx0Ll9tYXA9dC5fbWFwVG9BZGQ9bnVsbCx0aGlzKTp0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4hIXQmJm4odClpbiB0aGlzLl9sYXllcnN9LGVhY2hMYXllcjpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGksdGhpcy5fbGF5ZXJzW2VdKTtyZXR1cm4gdGhpc30sX2FkZExheWVyczpmdW5jdGlvbih0KXtmb3IodmFyIGk9MCxlPSh0PXQ/b2kodCk/dDpbdF06W10pLmxlbmd0aDtpPGU7aSsrKXRoaXMuYWRkTGF5ZXIodFtpXSl9LF9hZGRab29tTGltaXQ6ZnVuY3Rpb24odCl7IWlzTmFOKHQub3B0aW9ucy5tYXhab29tKSYmaXNOYU4odC5vcHRpb25zLm1pblpvb20pfHwodGhpcy5fem9vbUJvdW5kTGF5ZXJzW24odCldPXQsdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKX0sX3JlbW92ZVpvb21MaW1pdDpmdW5jdGlvbih0KXt2YXIgaT1uKHQpO3RoaXMuX3pvb21Cb3VuZExheWVyc1tpXSYmKGRlbGV0ZSB0aGlzLl96b29tQm91bmRMYXllcnNbaV0sdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKX0sX3VwZGF0ZVpvb21MZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdD0xLzAsaT0tMS8wLGU9dGhpcy5fZ2V0Wm9vbVNwYW4oKTtmb3IodmFyIG4gaW4gdGhpcy5fem9vbUJvdW5kTGF5ZXJzKXt2YXIgbz10aGlzLl96b29tQm91bmRMYXllcnNbbl0ub3B0aW9uczt0PXZvaWQgMD09PW8ubWluWm9vbT90Ok1hdGgubWluKHQsby5taW5ab29tKSxpPXZvaWQgMD09PW8ubWF4Wm9vbT9pOk1hdGgubWF4KGksby5tYXhab29tKX10aGlzLl9sYXllcnNNYXhab29tPWk9PT0tMS8wP3ZvaWQgMDppLHRoaXMuX2xheWVyc01pblpvb209dD09PTEvMD92b2lkIDA6dCxlIT09dGhpcy5fZ2V0Wm9vbVNwYW4oKSYmdGhpcy5maXJlKCJ6b29tbGV2ZWxzY2hhbmdlIiksdm9pZCAwPT09dGhpcy5vcHRpb25zLm1heFpvb20mJnRoaXMuX2xheWVyc01heFpvb20mJnRoaXMuZ2V0Wm9vbSgpPnRoaXMuX2xheWVyc01heFpvb20mJnRoaXMuc2V0Wm9vbSh0aGlzLl9sYXllcnNNYXhab29tKSx2b2lkIDA9PT10aGlzLm9wdGlvbnMubWluWm9vbSYmdGhpcy5fbGF5ZXJzTWluWm9vbSYmdGhpcy5nZXRab29tKCk8dGhpcy5fbGF5ZXJzTWluWm9vbSYmdGhpcy5zZXRab29tKHRoaXMuX2xheWVyc01pblpvb20pfX0pO3ZhciBHZT1xZS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtsKHRoaXMsaSksdGhpcy5fbGF5ZXJzPXt9O3ZhciBlLG47aWYodClmb3IoZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxhZGRMYXllcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldExheWVySWQodCk7cmV0dXJuIHRoaXMuX2xheWVyc1tpXT10LHRoaXMuX21hcCYmdGhpcy5fbWFwLmFkZExheWVyKHQpLHRoaXN9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBpPXQgaW4gdGhpcy5fbGF5ZXJzP3Q6dGhpcy5nZXRMYXllcklkKHQpO3JldHVybiB0aGlzLl9tYXAmJnRoaXMuX2xheWVyc1tpXSYmdGhpcy5fbWFwLnJlbW92ZUxheWVyKHRoaXMuX2xheWVyc1tpXSksZGVsZXRlIHRoaXMuX2xheWVyc1tpXSx0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4hIXQmJih0IGluIHRoaXMuX2xheWVyc3x8dGhpcy5nZXRMYXllcklkKHQpaW4gdGhpcy5fbGF5ZXJzKX0sY2xlYXJMYXllcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodGhpcy5yZW1vdmVMYXllcix0aGlzKX0saW52b2tlOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7Zm9yKGkgaW4gdGhpcy5fbGF5ZXJzKShlPXRoaXMuX2xheWVyc1tpXSlbdF0mJmVbdF0uYXBwbHkoZSxuKTtyZXR1cm4gdGhpc30sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5lYWNoTGF5ZXIodC5hZGRMYXllcix0KX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dGhpcy5lYWNoTGF5ZXIodC5yZW1vdmVMYXllcix0KX0sZWFjaExheWVyOmZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl0LmNhbGwoaSx0aGlzLl9sYXllcnNbZV0pO3JldHVybiB0aGlzfSxnZXRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF5ZXJzW3RdfSxnZXRMYXllcnM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodC5wdXNoLHQpLHR9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZva2UoInNldFpJbmRleCIsdCl9LGdldExheWVySWQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9fSksS2U9R2UuZXh0ZW5kKHthZGRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNMYXllcih0KT90aGlzOih0LmFkZEV2ZW50UGFyZW50KHRoaXMpLEdlLnByb3RvdHlwZS5hZGRMYXllci5jYWxsKHRoaXMsdCksdGhpcy5maXJlKCJsYXllcmFkZCIse2xheWVyOnR9KSl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc0xheWVyKHQpPyh0IGluIHRoaXMuX2xheWVycyYmKHQ9dGhpcy5fbGF5ZXJzW3RdKSx0LnJlbW92ZUV2ZW50UGFyZW50KHRoaXMpLEdlLnByb3RvdHlwZS5yZW1vdmVMYXllci5jYWxsKHRoaXMsdCksdGhpcy5maXJlKCJsYXllcnJlbW92ZSIse2xheWVyOnR9KSk6dGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKCJzZXRTdHlsZSIsdCl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiYnJpbmdUb0Zyb250Iil9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52b2tlKCJicmluZ1RvQmFjayIpfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgVDtmb3IodmFyIGkgaW4gdGhpcy5fbGF5ZXJzKXt2YXIgZT10aGlzLl9sYXllcnNbaV07dC5leHRlbmQoZS5nZXRCb3VuZHM/ZS5nZXRCb3VuZHMoKTplLmdldExhdExuZygpKX1yZXR1cm4gdH19KSxZZT12LmV4dGVuZCh7b3B0aW9uczp7cG9wdXBBbmNob3I6WzAsMF0sdG9vbHRpcEFuY2hvcjpbMCwwXX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtsKHRoaXMsdCl9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oImljb24iLHQpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oInNoYWRvdyIsdCl9LF9jcmVhdGVJY29uOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fZ2V0SWNvblVybCh0KTtpZighZSl7aWYoImljb24iPT09dCl0aHJvdyBuZXcgRXJyb3IoImljb25Vcmwgbm90IHNldCBpbiBJY29uIG9wdGlvbnMgKHNlZSB0aGUgZG9jcykuIik7cmV0dXJuIG51bGx9dmFyIG49dGhpcy5fY3JlYXRlSW1nKGUsaSYmIklNRyI9PT1pLnRhZ05hbWU/aTpudWxsKTtyZXR1cm4gdGhpcy5fc2V0SWNvblN0eWxlcyhuLHQpLG59LF9zZXRJY29uU3R5bGVzOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5vcHRpb25zLG49ZVtpKyJTaXplIl07Im51bWJlciI9PXR5cGVvZiBuJiYobj1bbixuXSk7dmFyIG89dyhuKSxzPXcoInNoYWRvdyI9PT1pJiZlLnNoYWRvd0FuY2hvcnx8ZS5pY29uQW5jaG9yfHxvJiZvLmRpdmlkZUJ5KDIsITApKTt0LmNsYXNzTmFtZT0ibGVhZmxldC1tYXJrZXItIitpKyIgIisoZS5jbGFzc05hbWV8fCIiKSxzJiYodC5zdHlsZS5tYXJnaW5MZWZ0PS1zLngrInB4Iix0LnN0eWxlLm1hcmdpblRvcD0tcy55KyJweCIpLG8mJih0LnN0eWxlLndpZHRoPW8ueCsicHgiLHQuc3R5bGUuaGVpZ2h0PW8ueSsicHgiKX0sX2NyZWF0ZUltZzpmdW5jdGlvbih0LGkpe3JldHVybiBpPWl8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLGkuc3JjPXQsaX0sX2dldEljb25Vcmw6ZnVuY3Rpb24odCl7cmV0dXJuIFlpJiZ0aGlzLm9wdGlvbnNbdCsiUmV0aW5hVXJsIl18fHRoaXMub3B0aW9uc1t0KyJVcmwiXX19KSxYZT1ZZS5leHRlbmQoe29wdGlvbnM6e2ljb25Vcmw6Im1hcmtlci1pY29uLnBuZyIsaWNvblJldGluYVVybDoibWFya2VyLWljb24tMngucG5nIixzaGFkb3dVcmw6Im1hcmtlci1zaGFkb3cucG5nIixpY29uU2l6ZTpbMjUsNDFdLGljb25BbmNob3I6WzEyLDQxXSxwb3B1cEFuY2hvcjpbMSwtMzRdLHRvb2x0aXBBbmNob3I6WzE2LC0yOF0sc2hhZG93U2l6ZTpbNDEsNDFdfSxfZ2V0SWNvblVybDpmdW5jdGlvbih0KXtyZXR1cm4gWGUuaW1hZ2VQYXRofHwoWGUuaW1hZ2VQYXRoPXRoaXMuX2RldGVjdEljb25QYXRoKCkpLCh0aGlzLm9wdGlvbnMuaW1hZ2VQYXRofHxYZS5pbWFnZVBhdGgpK1llLnByb3RvdHlwZS5fZ2V0SWNvblVybC5jYWxsKHRoaXMsdCl9LF9kZXRlY3RJY29uUGF0aDpmdW5jdGlvbigpe3ZhciB0PUcoImRpdiIsImxlYWZsZXQtZGVmYXVsdC1pY29uLXBhdGgiLGRvY3VtZW50LmJvZHkpLGk9cSh0LCJiYWNrZ3JvdW5kLWltYWdlIil8fHEodCwiYmFja2dyb3VuZEltYWdlIik7cmV0dXJuIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCksaT1udWxsPT09aXx8MCE9PWkuaW5kZXhPZigidXJsIik/IiI6aS5yZXBsYWNlKC9edXJsXChbIiddPy8sIiIpLnJlcGxhY2UoL21hcmtlci1pY29uXC5wbmdbIiddP1wpJC8sIiIpfX0pLEplPUVlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXJrZXI9dH0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXJrZXIuX2ljb247dGhpcy5fZHJhZ2dhYmxlfHwodGhpcy5fZHJhZ2dhYmxlPW5ldyBSZSh0LHQsITApKSx0aGlzLl9kcmFnZ2FibGUub24oe2RyYWdzdGFydDp0aGlzLl9vbkRyYWdTdGFydCxwcmVkcmFnOnRoaXMuX29uUHJlRHJhZyxkcmFnOnRoaXMuX29uRHJhZyxkcmFnZW5kOnRoaXMuX29uRHJhZ0VuZH0sdGhpcykuZW5hYmxlKCksUSh0LCJsZWFmbGV0LW1hcmtlci1kcmFnZ2FibGUiKX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXt0aGlzLl9kcmFnZ2FibGUub2ZmKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQscHJlZHJhZzp0aGlzLl9vblByZURyYWcsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLmRpc2FibGUoKSx0aGlzLl9tYXJrZXIuX2ljb24mJnR0KHRoaXMuX21hcmtlci5faWNvbiwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIil9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sX2FkanVzdFBhbjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXJrZXIsZT1pLl9tYXAsbj10aGlzLl9tYXJrZXIub3B0aW9ucy5hdXRvUGFuU3BlZWQsbz10aGlzLl9tYXJrZXIub3B0aW9ucy5hdXRvUGFuUGFkZGluZyxzPWh0KGkuX2ljb24pLHI9ZS5nZXRQaXhlbEJvdW5kcygpLGE9ZS5nZXRQaXhlbE9yaWdpbigpLGg9YihyLm1pbi5fc3VidHJhY3QoYSkuYWRkKG8pLHIubWF4Ll9zdWJ0cmFjdChhKS5zdWJ0cmFjdChvKSk7aWYoIWguY29udGFpbnMocykpe3ZhciB1PXcoKE1hdGgubWF4KGgubWF4Lngscy54KS1oLm1heC54KS8oci5tYXgueC1oLm1heC54KS0oTWF0aC5taW4oaC5taW4ueCxzLngpLWgubWluLngpLyhyLm1pbi54LWgubWluLngpLChNYXRoLm1heChoLm1heC55LHMueSktaC5tYXgueSkvKHIubWF4LnktaC5tYXgueSktKE1hdGgubWluKGgubWluLnkscy55KS1oLm1pbi55KS8oci5taW4ueS1oLm1pbi55KSkubXVsdGlwbHlCeShuKTtlLnBhbkJ5KHUse2FuaW1hdGU6ITF9KSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy5fYWRkKHUpLHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MuX2FkZCh1KSxhdChpLl9pY29uLHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zKSx0aGlzLl9vbkRyYWcodCksdGhpcy5fcGFuUmVxdWVzdD1mKHRoaXMuX2FkanVzdFBhbi5iaW5kKHRoaXMsdCkpfX0sX29uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fb2xkTGF0TG5nPXRoaXMuX21hcmtlci5nZXRMYXRMbmcoKSx0aGlzLl9tYXJrZXIuY2xvc2VQb3B1cCgpLmZpcmUoIm1vdmVzdGFydCIpLmZpcmUoImRyYWdzdGFydCIpfSxfb25QcmVEcmFnOmZ1bmN0aW9uKHQpe3RoaXMuX21hcmtlci5vcHRpb25zLmF1dG9QYW4mJihnKHRoaXMuX3BhblJlcXVlc3QpLHRoaXMuX3BhblJlcXVlc3Q9Zih0aGlzLl9hZGp1c3RQYW4uYmluZCh0aGlzLHQpKSl9LF9vbkRyYWc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFya2VyLGU9aS5fc2hhZG93LG49aHQoaS5faWNvbiksbz1pLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKG4pO2UmJmF0KGUsbiksaS5fbGF0bG5nPW8sdC5sYXRsbmc9byx0Lm9sZExhdExuZz10aGlzLl9vbGRMYXRMbmcsaS5maXJlKCJtb3ZlIix0KS5maXJlKCJkcmFnIix0KX0sX29uRHJhZ0VuZDpmdW5jdGlvbih0KXtnKHRoaXMuX3BhblJlcXVlc3QpLGRlbGV0ZSB0aGlzLl9vbGRMYXRMbmcsdGhpcy5fbWFya2VyLmZpcmUoIm1vdmVlbmQiKS5maXJlKCJkcmFnZW5kIix0KX19KSwkZT1xZS5leHRlbmQoe29wdGlvbnM6e2ljb246bmV3IFhlLGludGVyYWN0aXZlOiEwLGtleWJvYXJkOiEwLHRpdGxlOiIiLGFsdDoiIix6SW5kZXhPZmZzZXQ6MCxvcGFjaXR5OjEscmlzZU9uSG92ZXI6ITEscmlzZU9mZnNldDoyNTAscGFuZToibWFya2VyUGFuZSIsYnViYmxpbmdNb3VzZUV2ZW50czohMSxkcmFnZ2FibGU6ITEsYXV0b1BhbjohMSxhdXRvUGFuUGFkZGluZzpbNTAsNTBdLGF1dG9QYW5TcGVlZDoxMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGkpe2wodGhpcyxpKSx0aGlzLl9sYXRsbmc9Qyh0KX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fem9vbUFuaW1hdGVkPXRoaXMuX3pvb21BbmltYXRlZCYmdC5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb24sdGhpcy5fem9vbUFuaW1hdGVkJiZ0Lm9uKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyksdGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nJiZ0aGlzLmRyYWdnaW5nLmVuYWJsZWQoKSYmKHRoaXMub3B0aW9ucy5kcmFnZ2FibGU9ITAsdGhpcy5kcmFnZ2luZy5yZW1vdmVIb29rcygpKSxkZWxldGUgdGhpcy5kcmFnZ2luZyx0aGlzLl96b29tQW5pbWF0ZWQmJnQub2ZmKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyksdGhpcy5fcmVtb3ZlSWNvbigpLHRoaXMuX3JlbW92ZVNoYWRvdygpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXtyZXR1cm57em9vbTp0aGlzLnVwZGF0ZSx2aWV3cmVzZXQ6dGhpcy51cGRhdGV9fSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbGF0bG5nO3JldHVybiB0aGlzLl9sYXRsbmc9Qyh0KSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgibW92ZSIse29sZExhdExuZzppLGxhdGxuZzp0aGlzLl9sYXRsbmd9KX0sc2V0WkluZGV4T2Zmc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0PXQsdGhpcy51cGRhdGUoKX0sc2V0SWNvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb249dCx0aGlzLl9tYXAmJih0aGlzLl9pbml0SWNvbigpLHRoaXMudXBkYXRlKCkpLHRoaXMuX3BvcHVwJiZ0aGlzLmJpbmRQb3B1cCh0aGlzLl9wb3B1cCx0aGlzLl9wb3B1cC5vcHRpb25zKSx0aGlzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ljb259LHVwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2ljb24mJnRoaXMuX21hcCl7dmFyIHQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLnJvdW5kKCk7dGhpcy5fc2V0UG9zKHQpfXJldHVybiB0aGlzfSxfaW5pdEljb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsaT0ibGVhZmxldC16b29tLSIrKHRoaXMuX3pvb21BbmltYXRlZD8iYW5pbWF0ZWQiOiJoaWRlIiksZT10Lmljb24uY3JlYXRlSWNvbih0aGlzLl9pY29uKSxuPSExO2UhPT10aGlzLl9pY29uJiYodGhpcy5faWNvbiYmdGhpcy5fcmVtb3ZlSWNvbigpLG49ITAsdC50aXRsZSYmKGUudGl0bGU9dC50aXRsZSksIklNRyI9PT1lLnRhZ05hbWUmJihlLmFsdD10LmFsdHx8IiIpKSxRKGUsaSksdC5rZXlib2FyZCYmKGUudGFiSW5kZXg9IjAiKSx0aGlzLl9pY29uPWUsdC5yaXNlT25Ib3ZlciYmdGhpcy5vbih7bW91c2VvdmVyOnRoaXMuX2JyaW5nVG9Gcm9udCxtb3VzZW91dDp0aGlzLl9yZXNldFpJbmRleH0pO3ZhciBvPXQuaWNvbi5jcmVhdGVTaGFkb3codGhpcy5fc2hhZG93KSxzPSExO28hPT10aGlzLl9zaGFkb3cmJih0aGlzLl9yZW1vdmVTaGFkb3coKSxzPSEwKSxvJiYoUShvLGkpLG8uYWx0PSIiKSx0aGlzLl9zaGFkb3c9byx0Lm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpLG4mJnRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2ljb24pLHRoaXMuX2luaXRJbnRlcmFjdGlvbigpLG8mJnMmJnRoaXMuZ2V0UGFuZSgic2hhZG93UGFuZSIpLmFwcGVuZENoaWxkKHRoaXMuX3NoYWRvdyl9LF9yZW1vdmVJY29uOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnJpc2VPbkhvdmVyJiZ0aGlzLm9mZih7bW91c2VvdmVyOnRoaXMuX2JyaW5nVG9Gcm9udCxtb3VzZW91dDp0aGlzLl9yZXNldFpJbmRleH0pLEsodGhpcy5faWNvbiksdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pY29uKSx0aGlzLl9pY29uPW51bGx9LF9yZW1vdmVTaGFkb3c6ZnVuY3Rpb24oKXt0aGlzLl9zaGFkb3cmJksodGhpcy5fc2hhZG93KSx0aGlzLl9zaGFkb3c9bnVsbH0sX3NldFBvczpmdW5jdGlvbih0KXthdCh0aGlzLl9pY29uLHQpLHRoaXMuX3NoYWRvdyYmYXQodGhpcy5fc2hhZG93LHQpLHRoaXMuX3pJbmRleD10LnkrdGhpcy5vcHRpb25zLnpJbmRleE9mZnNldCx0aGlzLl9yZXNldFpJbmRleCgpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKHQpe3RoaXMuX2ljb24uc3R5bGUuekluZGV4PXRoaXMuX3pJbmRleCt0fSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcikucm91bmQoKTt0aGlzLl9zZXRQb3MoaSl9LF9pbml0SW50ZXJhY3Rpb246ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihRKHRoaXMuX2ljb24sImxlYWZsZXQtaW50ZXJhY3RpdmUiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ljb24pLEplKSl7dmFyIHQ9dGhpcy5vcHRpb25zLmRyYWdnYWJsZTt0aGlzLmRyYWdnaW5nJiYodD10aGlzLmRyYWdnaW5nLmVuYWJsZWQoKSx0aGlzLmRyYWdnaW5nLmRpc2FibGUoKSksdGhpcy5kcmFnZ2luZz1uZXcgSmUodGhpcyksdCYmdGhpcy5kcmFnZ2luZy5lbmFibGUoKX19LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fbWFwJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMub3BhY2l0eTtudCh0aGlzLl9pY29uLHQpLHRoaXMuX3NoYWRvdyYmbnQodGhpcy5fc2hhZG93LHQpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KHRoaXMub3B0aW9ucy5yaXNlT2Zmc2V0KX0sX3Jlc2V0WkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KDApfSxfZ2V0UG9wdXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcn0sX2dldFRvb2x0aXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy50b29sdGlwQW5jaG9yfX0pLFFlPXFlLmV4dGVuZCh7b3B0aW9uczp7c3Ryb2tlOiEwLGNvbG9yOiIjMzM4OGZmIix3ZWlnaHQ6MyxvcGFjaXR5OjEsbGluZUNhcDoicm91bmQiLGxpbmVKb2luOiJyb3VuZCIsZGFzaEFycmF5Om51bGwsZGFzaE9mZnNldDpudWxsLGZpbGw6ITEsZmlsbENvbG9yOm51bGwsZmlsbE9wYWNpdHk6LjIsZmlsbFJ1bGU6ImV2ZW5vZGQiLGludGVyYWN0aXZlOiEwLGJ1YmJsaW5nTW91c2VFdmVudHM6ITB9LGJlZm9yZUFkZDpmdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlcj10LmdldFJlbmRlcmVyKHRoaXMpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9pbml0UGF0aCh0aGlzKSx0aGlzLl9yZXNldCgpLHRoaXMuX3JlbmRlcmVyLl9hZGRQYXRoKHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9yZW1vdmVQYXRoKHRoaXMpfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9yZW5kZXJlci5fdXBkYXRlUGF0aCh0aGlzKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0aGlzLHQpLHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fdXBkYXRlU3R5bGUodGhpcyksdGhpc30sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0Zyb250KHRoaXMpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0JhY2sodGhpcyksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXRofSxfcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wcm9qZWN0KCksdGhpcy5fdXBkYXRlKCl9LF9jbGlja1RvbGVyYW5jZTpmdW5jdGlvbigpe3JldHVybih0aGlzLm9wdGlvbnMuc3Ryb2tlP3RoaXMub3B0aW9ucy53ZWlnaHQvMjowKSt0aGlzLl9yZW5kZXJlci5vcHRpb25zLnRvbGVyYW5jZX19KSx0bj1RZS5leHRlbmQoe29wdGlvbnM6e2ZpbGw6ITAscmFkaXVzOjEwfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7bCh0aGlzLGkpLHRoaXMuX2xhdGxuZz1DKHQpLHRoaXMuX3JhZGl1cz10aGlzLm9wdGlvbnMucmFkaXVzfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1DKHQpLHRoaXMucmVkcmF3KCksdGhpcy5maXJlKCJtb3ZlIix7bGF0bG5nOnRoaXMuX2xhdGxuZ30pfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5yYWRpdXM9dGhpcy5fcmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGl1c30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIGk9dCYmdC5yYWRpdXN8fHRoaXMuX3JhZGl1cztyZXR1cm4gUWUucHJvdG90eXBlLnNldFN0eWxlLmNhbGwodGhpcyx0KSx0aGlzLnNldFJhZGl1cyhpKSx0aGlzfSxfcHJvamVjdDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSx0aGlzLl91cGRhdGVCb3VuZHMoKX0sX3VwZGF0ZUJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JhZGl1cyxpPXRoaXMuX3JhZGl1c1l8fHQsZT10aGlzLl9jbGlja1RvbGVyYW5jZSgpLG49W3QrZSxpK2VdO3RoaXMuX3B4Qm91bmRzPW5ldyBQKHRoaXMuX3BvaW50LnN1YnRyYWN0KG4pLHRoaXMuX3BvaW50LmFkZChuKSl9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZVBhdGgoKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlQ2lyY2xlKHRoaXMpfSxfZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaXVzJiYhdGhpcy5fcmVuZGVyZXIuX2JvdW5kcy5pbnRlcnNlY3RzKHRoaXMuX3B4Qm91bmRzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLl9wb2ludCk8PXRoaXMuX3JhZGl1cyt0aGlzLl9jbGlja1RvbGVyYW5jZSgpfX0pLGVuPXRuLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlJiYoZT1pKHt9LG4se3JhZGl1czplfSkpLGwodGhpcyxlKSx0aGlzLl9sYXRsbmc9Qyh0KSxpc05hTih0aGlzLm9wdGlvbnMucmFkaXVzKSl0aHJvdyBuZXcgRXJyb3IoIkNpcmNsZSByYWRpdXMgY2Fubm90IGJlIE5hTiIpO3RoaXMuX21SYWRpdXM9dGhpcy5vcHRpb25zLnJhZGl1c30sc2V0UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tUmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21SYWRpdXN9LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLl9yYWRpdXMsdGhpcy5fcmFkaXVzWXx8dGhpcy5fcmFkaXVzXTtyZXR1cm4gbmV3IFQodGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5zdWJ0cmFjdCh0KSksdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5hZGQodCkpKX0sc2V0U3R5bGU6UWUucHJvdG90eXBlLnNldFN0eWxlLF9wcm9qZWN0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbGF0bG5nLmxuZyxpPXRoaXMuX2xhdGxuZy5sYXQsZT10aGlzLl9tYXAsbj1lLm9wdGlvbnMuY3JzO2lmKG4uZGlzdGFuY2U9PT1waS5kaXN0YW5jZSl7dmFyIG89TWF0aC5QSS8xODAscz10aGlzLl9tUmFkaXVzL3BpLlIvbyxyPWUucHJvamVjdChbaStzLHRdKSxhPWUucHJvamVjdChbaS1zLHRdKSxoPXIuYWRkKGEpLmRpdmlkZUJ5KDIpLHU9ZS51bnByb2plY3QoaCkubGF0LGw9TWF0aC5hY29zKChNYXRoLmNvcyhzKm8pLU1hdGguc2luKGkqbykqTWF0aC5zaW4odSpvKSkvKE1hdGguY29zKGkqbykqTWF0aC5jb3ModSpvKSkpL287KGlzTmFOKGwpfHwwPT09bCkmJihsPXMvTWF0aC5jb3MoTWF0aC5QSS8xODAqaSkpLHRoaXMuX3BvaW50PWguc3VidHJhY3QoZS5nZXRQaXhlbE9yaWdpbigpKSx0aGlzLl9yYWRpdXM9aXNOYU4obCk/MDpoLngtZS5wcm9qZWN0KFt1LHQtbF0pLngsdGhpcy5fcmFkaXVzWT1oLnktci55fWVsc2V7dmFyIGM9bi51bnByb2plY3Qobi5wcm9qZWN0KHRoaXMuX2xhdGxuZykuc3VidHJhY3QoW3RoaXMuX21SYWRpdXMsMF0pKTt0aGlzLl9wb2ludD1lLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLHRoaXMuX3JhZGl1cz10aGlzLl9wb2ludC54LWUubGF0TG5nVG9MYXllclBvaW50KGMpLnh9dGhpcy5fdXBkYXRlQm91bmRzKCl9fSksbm49UWUuZXh0ZW5kKHtvcHRpb25zOntzbW9vdGhGYWN0b3I6MSxub0NsaXA6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtsKHRoaXMsaSksdGhpcy5fc2V0TGF0TG5ncyh0KX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zZXRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh9LGNsb3Nlc3RMYXllclBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxlLG49MS8wLG89bnVsbCxzPUR0LHI9MCxhPXRoaXMuX3BhcnRzLmxlbmd0aDtyPGE7cisrKWZvcih2YXIgaD10aGlzLl9wYXJ0c1tyXSx1PTEsbD1oLmxlbmd0aDt1PGw7dSsrKXt2YXIgYz1zKHQsaT1oW3UtMV0sZT1oW3VdLCEwKTtjPG4mJihuPWMsbz1zKHQsaSxlKSl9cmV0dXJuIG8mJihvLmRpc3RhbmNlPU1hdGguc3FydChuKSksb30sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKCkiKTt2YXIgdCxpLGUsbixvLHMscixhPXRoaXMuX3JpbmdzWzBdLGg9YS5sZW5ndGg7aWYoIWgpcmV0dXJuIG51bGw7Zm9yKHQ9MCxpPTA7dDxoLTE7dCsrKWkrPWFbdF0uZGlzdGFuY2VUbyhhW3QrMV0pLzI7aWYoMD09PWkpcmV0dXJuIHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoYVswXSk7Zm9yKHQ9MCxuPTA7dDxoLTE7dCsrKWlmKG89YVt0XSxzPWFbdCsxXSxlPW8uZGlzdGFuY2VUbyhzKSwobis9ZSk+aSlyZXR1cm4gcj0obi1pKS9lLHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoW3MueC1yKihzLngtby54KSxzLnktcioocy55LW8ueSldKX0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdW5kc30sYWRkTGF0TG5nOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8dGhpcy5fZGVmYXVsdFNoYXBlKCksdD1DKHQpLGkucHVzaCh0KSx0aGlzLl9ib3VuZHMuZXh0ZW5kKHQpLHRoaXMucmVkcmF3KCl9LF9zZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3RoaXMuX2JvdW5kcz1uZXcgVCx0aGlzLl9sYXRsbmdzPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHQpfSxfZGVmYXVsdFNoYXBlOmZ1bmN0aW9uKCl7cmV0dXJuIGp0KHRoaXMuX2xhdGxuZ3MpP3RoaXMuX2xhdGxuZ3M6dGhpcy5fbGF0bG5nc1swXX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaT1bXSxlPWp0KHQpLG49MCxvPXQubGVuZ3RoO248bztuKyspZT8oaVtuXT1DKHRbbl0pLHRoaXMuX2JvdW5kcy5leHRlbmQoaVtuXSkpOmlbbl09dGhpcy5fY29udmVydExhdExuZ3ModFtuXSk7cmV0dXJuIGl9LF9wcm9qZWN0OmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFA7dGhpcy5fcmluZ3M9W10sdGhpcy5fcHJvamVjdExhdGxuZ3ModGhpcy5fbGF0bG5ncyx0aGlzLl9yaW5ncyx0KTt2YXIgaT10aGlzLl9jbGlja1RvbGVyYW5jZSgpLGU9bmV3IHgoaSxpKTt0aGlzLl9ib3VuZHMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKSYmKHQubWluLl9zdWJ0cmFjdChlKSx0Lm1heC5fYWRkKGUpLHRoaXMuX3B4Qm91bmRzPXQpfSxfcHJvamVjdExhdGxuZ3M6ZnVuY3Rpb24odCxpLGUpe3ZhciBuLG8scz10WzBdaW5zdGFuY2VvZiBNLHI9dC5sZW5ndGg7aWYocyl7Zm9yKG89W10sbj0wO248cjtuKyspb1tuXT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRbbl0pLGUuZXh0ZW5kKG9bbl0pO2kucHVzaChvKX1lbHNlIGZvcihuPTA7bjxyO24rKyl0aGlzLl9wcm9qZWN0TGF0bG5ncyh0W25dLGksZSl9LF9jbGlwUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVuZGVyZXIuX2JvdW5kcztpZih0aGlzLl9wYXJ0cz1bXSx0aGlzLl9weEJvdW5kcyYmdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyh0KSlpZih0aGlzLm9wdGlvbnMubm9DbGlwKXRoaXMuX3BhcnRzPXRoaXMuX3JpbmdzO2Vsc2V7dmFyIGksZSxuLG8scyxyLGEsaD10aGlzLl9wYXJ0cztmb3IoaT0wLG49MCxvPXRoaXMuX3JpbmdzLmxlbmd0aDtpPG87aSsrKWZvcihlPTAscz0oYT10aGlzLl9yaW5nc1tpXSkubGVuZ3RoO2U8cy0xO2UrKykocj1JdChhW2VdLGFbZSsxXSx0LGUsITApKSYmKGhbbl09aFtuXXx8W10saFtuXS5wdXNoKHJbMF0pLHJbMV09PT1hW2UrMV0mJmUhPT1zLTJ8fChoW25dLnB1c2goclsxXSksbisrKSl9fSxfc2ltcGxpZnlQb2ludHM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fcGFydHMsaT10aGlzLm9wdGlvbnMuc21vb3RoRmFjdG9yLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspdFtlXT1adCh0W2VdLGkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY2xpcFBvaW50cygpLHRoaXMuX3NpbXBsaWZ5UG9pbnRzKCksdGhpcy5fdXBkYXRlUGF0aCgpKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlUG9seSh0aGlzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZSxuLG8scyxyLGEsaD10aGlzLl9jbGlja1RvbGVyYW5jZSgpO2lmKCF0aGlzLl9weEJvdW5kc3x8IXRoaXMuX3B4Qm91bmRzLmNvbnRhaW5zKHQpKXJldHVybiExO2ZvcihlPTAscz10aGlzLl9wYXJ0cy5sZW5ndGg7ZTxzO2UrKylmb3Iobj0wLG89KHI9KGE9dGhpcy5fcGFydHNbZV0pLmxlbmd0aCktMTtuPHI7bz1uKyspaWYoKGl8fDAhPT1uKSYmRXQodCxhW29dLGFbbl0pPD1oKXJldHVybiEwO3JldHVybiExfX0pO25uLl9mbGF0PVd0O3ZhciBvbj1ubi5leHRlbmQoe29wdGlvbnM6e2ZpbGw6ITB9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh8fCF0aGlzLl9sYXRsbmdzWzBdLmxlbmd0aH0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKCkiKTt2YXIgdCxpLGUsbixvLHMscixhLGgsdT10aGlzLl9yaW5nc1swXSxsPXUubGVuZ3RoO2lmKCFsKXJldHVybiBudWxsO2ZvcihzPXI9YT0wLHQ9MCxpPWwtMTt0PGw7aT10KyspZT11W3RdLG49dVtpXSxvPWUueSpuLngtbi55KmUueCxyKz0oZS54K24ueCkqbyxhKz0oZS55K24ueSkqbyxzKz0zKm87cmV0dXJuIGg9MD09PXM/dVswXTpbci9zLGEvc10sdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhoKX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQpe3ZhciBpPW5uLnByb3RvdHlwZS5fY29udmVydExhdExuZ3MuY2FsbCh0aGlzLHQpLGU9aS5sZW5ndGg7cmV0dXJuIGU+PTImJmlbMF1pbnN0YW5jZW9mIE0mJmlbMF0uZXF1YWxzKGlbZS0xXSkmJmkucG9wKCksaX0sX3NldExhdExuZ3M6ZnVuY3Rpb24odCl7bm4ucHJvdG90eXBlLl9zZXRMYXRMbmdzLmNhbGwodGhpcyx0KSxqdCh0aGlzLl9sYXRsbmdzKSYmKHRoaXMuX2xhdGxuZ3M9W3RoaXMuX2xhdGxuZ3NdKX0sX2RlZmF1bHRTaGFwZTpmdW5jdGlvbigpe3JldHVybiBqdCh0aGlzLl9sYXRsbmdzWzBdKT90aGlzLl9sYXRsbmdzWzBdOnRoaXMuX2xhdGxuZ3NbMF1bMF19LF9jbGlwUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVuZGVyZXIuX2JvdW5kcyxpPXRoaXMub3B0aW9ucy53ZWlnaHQsZT1uZXcgeChpLGkpO2lmKHQ9bmV3IFAodC5taW4uc3VidHJhY3QoZSksdC5tYXguYWRkKGUpKSx0aGlzLl9wYXJ0cz1bXSx0aGlzLl9weEJvdW5kcyYmdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyh0KSlpZih0aGlzLm9wdGlvbnMubm9DbGlwKXRoaXMuX3BhcnRzPXRoaXMuX3JpbmdzO2Vsc2UgZm9yKHZhciBuLG89MCxzPXRoaXMuX3JpbmdzLmxlbmd0aDtvPHM7bysrKShuPUh0KHRoaXMuX3JpbmdzW29dLHQsITApKS5sZW5ndGgmJnRoaXMuX3BhcnRzLnB1c2gobil9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVBvbHkodGhpcywhMCl9LF9jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3ZhciBpLGUsbixvLHMscixhLGgsdT0hMTtpZighdGhpcy5fcHhCb3VuZHN8fCF0aGlzLl9weEJvdW5kcy5jb250YWlucyh0KSlyZXR1cm4hMTtmb3Iobz0wLGE9dGhpcy5fcGFydHMubGVuZ3RoO288YTtvKyspZm9yKHM9MCxyPShoPShpPXRoaXMuX3BhcnRzW29dKS5sZW5ndGgpLTE7czxoO3I9cysrKWU9aVtzXSxuPWlbcl0sZS55PnQueSE9bi55PnQueSYmdC54PChuLngtZS54KSoodC55LWUueSkvKG4ueS1lLnkpK2UueCYmKHU9IXUpO3JldHVybiB1fHxubi5wcm90b3R5cGUuX2NvbnRhaW5zUG9pbnQuY2FsbCh0aGlzLHQsITApfX0pLHNuPUtlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGkpe2wodGhpcyxpKSx0aGlzLl9sYXllcnM9e30sdCYmdGhpcy5hZGREYXRhKHQpfSxhZGREYXRhOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbixvPW9pKHQpP3Q6dC5mZWF0dXJlcztpZihvKXtmb3IoaT0wLGU9by5sZW5ndGg7aTxlO2krKykoKG49b1tpXSkuZ2VvbWV0cmllc3x8bi5nZW9tZXRyeXx8bi5mZWF0dXJlc3x8bi5jb29yZGluYXRlcykmJnRoaXMuYWRkRGF0YShuKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm9wdGlvbnM7aWYocy5maWx0ZXImJiFzLmZpbHRlcih0KSlyZXR1cm4gdGhpczt2YXIgcj1GdCh0LHMpO3JldHVybiByPyhyLmZlYXR1cmU9WXQodCksci5kZWZhdWx0T3B0aW9ucz1yLm9wdGlvbnMsdGhpcy5yZXNldFN0eWxlKHIpLHMub25FYWNoRmVhdHVyZSYmcy5vbkVhY2hGZWF0dXJlKHQsciksdGhpcy5hZGRMYXllcihyKSk6dGhpc30scmVzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5vcHRpb25zPWkoe30sdC5kZWZhdWx0T3B0aW9ucyksdGhpcy5fc2V0TGF5ZXJTdHlsZSh0LHRoaXMub3B0aW9ucy5zdHlsZSksdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGkpe3RoaXMuX3NldExheWVyU3R5bGUoaSx0KX0sdGhpcyl9LF9zZXRMYXllclN0eWxlOmZ1bmN0aW9uKHQsaSl7ImZ1bmN0aW9uIj09dHlwZW9mIGkmJihpPWkodC5mZWF0dXJlKSksdC5zZXRTdHlsZSYmdC5zZXRTdHlsZShpKX19KSxybj17dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3JldHVybiBLdCh0aGlzLHt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6cXQodGhpcy5nZXRMYXRMbmcoKSx0KX0pfX07JGUuaW5jbHVkZShybiksZW4uaW5jbHVkZShybiksdG4uaW5jbHVkZShybiksbm4uaW5jbHVkZSh7dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBpPSFqdCh0aGlzLl9sYXRsbmdzKSxlPUd0KHRoaXMuX2xhdGxuZ3MsaT8xOjAsITEsdCk7cmV0dXJuIEt0KHRoaXMse3R5cGU6KGk/Ik11bHRpIjoiIikrIkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmV9KX19KSxvbi5pbmNsdWRlKHt0b0dlb0pTT046ZnVuY3Rpb24odCl7dmFyIGk9IWp0KHRoaXMuX2xhdGxuZ3MpLGU9aSYmIWp0KHRoaXMuX2xhdGxuZ3NbMF0pLG49R3QodGhpcy5fbGF0bG5ncyxlPzI6aT8xOjAsITAsdCk7cmV0dXJuIGl8fChuPVtuXSksS3QodGhpcyx7dHlwZTooZT8iTXVsdGkiOiIiKSsiUG9seWdvbiIsY29vcmRpbmF0ZXM6bn0pfX0pLEdlLmluY2x1ZGUoe3RvTXVsdGlQb2ludDpmdW5jdGlvbih0KXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24oZSl7aS5wdXNoKGUudG9HZW9KU09OKHQpLmdlb21ldHJ5LmNvb3JkaW5hdGVzKX0pLEt0KHRoaXMse3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOml9KX0sdG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLmdlb21ldHJ5JiZ0aGlzLmZlYXR1cmUuZ2VvbWV0cnkudHlwZTtpZigiTXVsdGlQb2ludCI9PT1pKXJldHVybiB0aGlzLnRvTXVsdGlQb2ludCh0KTt2YXIgZT0iR2VvbWV0cnlDb2xsZWN0aW9uIj09PWksbj1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24oaSl7aWYoaS50b0dlb0pTT04pe3ZhciBvPWkudG9HZW9KU09OKHQpO2lmKGUpbi5wdXNoKG8uZ2VvbWV0cnkpO2Vsc2V7dmFyIHM9WXQobyk7IkZlYXR1cmVDb2xsZWN0aW9uIj09PXMudHlwZT9uLnB1c2guYXBwbHkobixzLmZlYXR1cmVzKTpuLnB1c2gocyl9fX0pLGU/S3QodGhpcyx7Z2VvbWV0cmllczpuLHR5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiJ9KTp7dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOm59fX0pO3ZhciBhbj1YdCxobj1xZS5leHRlbmQoe29wdGlvbnM6e29wYWNpdHk6MSxhbHQ6IiIsaW50ZXJhY3RpdmU6ITEsY3Jvc3NPcmlnaW46ITEsZXJyb3JPdmVybGF5VXJsOiIiLHpJbmRleDoxLGNsYXNzTmFtZToiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGksZSl7dGhpcy5fdXJsPXQsdGhpcy5fYm91bmRzPXooaSksbCh0aGlzLGUpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2ltYWdlfHwodGhpcy5faW5pdEltYWdlKCksdGhpcy5vcHRpb25zLm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihRKHRoaXMuX2ltYWdlLCJsZWFmbGV0LWludGVyYWN0aXZlIiksdGhpcy5hZGRJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSkpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2ltYWdlKSx0aGlzLl9yZXNldCgpfSxvblJlbW92ZTpmdW5jdGlvbigpe0sodGhpcy5faW1hZ2UpLHRoaXMub3B0aW9ucy5pbnRlcmFjdGl2ZSYmdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSl9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5faW1hZ2UmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5vcGFjaXR5JiZ0aGlzLnNldE9wYWNpdHkodC5vcGFjaXR5KSx0aGlzfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZYKHRoaXMuX2ltYWdlKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJkoodGhpcy5faW1hZ2UpLHRoaXN9LHNldFVybDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdXJsPXQsdGhpcy5faW1hZ2UmJih0aGlzLl9pbWFnZS5zcmM9dCksdGhpc30sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ib3VuZHM9eih0KSx0aGlzLl9tYXAmJnRoaXMuX3Jlc2V0KCksdGhpc30sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3pvb206dGhpcy5fcmVzZXQsdmlld3Jlc2V0OnRoaXMuX3Jlc2V0fTtyZXR1cm4gdGhpcy5fem9vbUFuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl9hbmltYXRlWm9vbSksdH0sc2V0WkluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4PXQsdGhpcy5fdXBkYXRlWkluZGV4KCksdGhpc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdW5kc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbWFnZX0sX2luaXRJbWFnZTpmdW5jdGlvbigpe3ZhciB0PSJJTUciPT09dGhpcy5fdXJsLnRhZ05hbWUsaT10aGlzLl9pbWFnZT10P3RoaXMuX3VybDpHKCJpbWciKTtRKGksImxlYWZsZXQtaW1hZ2UtbGF5ZXIiKSx0aGlzLl96b29tQW5pbWF0ZWQmJlEoaSwibGVhZmxldC16b29tLWFuaW1hdGVkIiksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmUShpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLGkub25zZWxlY3RzdGFydD1yLGkub25tb3VzZW1vdmU9cixpLm9ubG9hZD1lKHRoaXMuZmlyZSx0aGlzLCJsb2FkIiksaS5vbmVycm9yPWUodGhpcy5fb3ZlcmxheU9uRXJyb3IsdGhpcywiZXJyb3IiKSwodGhpcy5vcHRpb25zLmNyb3NzT3JpZ2lufHwiIj09PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbikmJihpLmNyb3NzT3JpZ2luPSEwPT09dGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luPyIiOnRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiksdGhpcy5vcHRpb25zLnpJbmRleCYmdGhpcy5fdXBkYXRlWkluZGV4KCksdD90aGlzLl91cmw9aS5zcmM6KGkuc3JjPXRoaXMuX3VybCxpLmFsdD10aGlzLm9wdGlvbnMuYWx0KX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcC5nZXRab29tU2NhbGUodC56b29tKSxlPXRoaXMuX21hcC5fbGF0TG5nQm91bmRzVG9OZXdMYXllckJvdW5kcyh0aGlzLl9ib3VuZHMsdC56b29tLHQuY2VudGVyKS5taW47cnQodGhpcy5faW1hZ2UsZSxpKX0sX3Jlc2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW1hZ2UsaT1uZXcgUCh0aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2JvdW5kcy5nZXROb3J0aFdlc3QoKSksdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ib3VuZHMuZ2V0U291dGhFYXN0KCkpKSxlPWkuZ2V0U2l6ZSgpO2F0KHQsaS5taW4pLHQuc3R5bGUud2lkdGg9ZS54KyJweCIsdC5zdHlsZS5oZWlnaHQ9ZS55KyJweCJ9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7bnQodGhpcy5faW1hZ2UsdGhpcy5vcHRpb25zLm9wYWNpdHkpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5faW1hZ2UmJnZvaWQgMCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJm51bGwhPT10aGlzLm9wdGlvbnMuekluZGV4JiYodGhpcy5faW1hZ2Uuc3R5bGUuekluZGV4PXRoaXMub3B0aW9ucy56SW5kZXgpfSxfb3ZlcmxheU9uRXJyb3I6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoImVycm9yIik7dmFyIHQ9dGhpcy5vcHRpb25zLmVycm9yT3ZlcmxheVVybDt0JiZ0aGlzLl91cmwhPT10JiYodGhpcy5fdXJsPXQsdGhpcy5faW1hZ2Uuc3JjPXQpfX0pLHVuPWhuLmV4dGVuZCh7b3B0aW9uczp7YXV0b3BsYXk6ITAsbG9vcDohMH0sX2luaXRJbWFnZTpmdW5jdGlvbigpe3ZhciB0PSJWSURFTyI9PT10aGlzLl91cmwudGFnTmFtZSxpPXRoaXMuX2ltYWdlPXQ/dGhpcy5fdXJsOkcoInZpZGVvIik7aWYoUShpLCJsZWFmbGV0LWltYWdlLWxheWVyIiksdGhpcy5fem9vbUFuaW1hdGVkJiZRKGksImxlYWZsZXQtem9vbS1hbmltYXRlZCIpLGkub25zZWxlY3RzdGFydD1yLGkub25tb3VzZW1vdmU9cixpLm9ubG9hZGVkZGF0YT1lKHRoaXMuZmlyZSx0aGlzLCJsb2FkIiksdCl7Zm9yKHZhciBuPWkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNvdXJjZSIpLG89W10scz0wO3M8bi5sZW5ndGg7cysrKW8ucHVzaChuW3NdLnNyYyk7dGhpcy5fdXJsPW4ubGVuZ3RoPjA/bzpbaS5zcmNdfWVsc2V7b2kodGhpcy5fdXJsKXx8KHRoaXMuX3VybD1bdGhpcy5fdXJsXSksaS5hdXRvcGxheT0hIXRoaXMub3B0aW9ucy5hdXRvcGxheSxpLmxvb3A9ISF0aGlzLm9wdGlvbnMubG9vcDtmb3IodmFyIGE9MDthPHRoaXMuX3VybC5sZW5ndGg7YSsrKXt2YXIgaD1HKCJzb3VyY2UiKTtoLnNyYz10aGlzLl91cmxbYV0saS5hcHBlbmRDaGlsZChoKX19fX0pLGxuPXFlLmV4dGVuZCh7b3B0aW9uczp7b2Zmc2V0OlswLDddLGNsYXNzTmFtZToiIixwYW5lOiJwb3B1cFBhbmUifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7bCh0aGlzLHQpLHRoaXMuX3NvdXJjZT1pfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl96b29tQW5pbWF0ZWQ9dC5fem9vbUFuaW1hdGVkLHRoaXMuX2NvbnRhaW5lcnx8dGhpcy5faW5pdExheW91dCgpLHQuX2ZhZGVBbmltYXRlZCYmbnQodGhpcy5fY29udGFpbmVyLDApLGNsZWFyVGltZW91dCh0aGlzLl9yZW1vdmVUaW1lb3V0KSx0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMudXBkYXRlKCksdC5fZmFkZUFuaW1hdGVkJiZudCh0aGlzLl9jb250YWluZXIsMSksdGhpcy5icmluZ1RvRnJvbnQoKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5fZmFkZUFuaW1hdGVkPyhudCh0aGlzLl9jb250YWluZXIsMCksdGhpcy5fcmVtb3ZlVGltZW91dD1zZXRUaW1lb3V0KGUoSyx2b2lkIDAsdGhpcy5fY29udGFpbmVyKSwyMDApKTpLKHRoaXMuX2NvbnRhaW5lcil9LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LHNldExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5nPUModCksdGhpcy5fbWFwJiYodGhpcy5fdXBkYXRlUG9zaXRpb24oKSx0aGlzLl9hZGp1c3RQYW4oKSksdGhpc30sZ2V0Q29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxzZXRDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb250ZW50PXQsdGhpcy51cGRhdGUoKSx0aGlzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fdXBkYXRlQ29udGVudCgpLHRoaXMuX3VwZGF0ZUxheW91dCgpLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9IiIsdGhpcy5fYWRqdXN0UGFuKCkpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17em9vbTp0aGlzLl91cGRhdGVQb3NpdGlvbix2aWV3cmVzZXQ6dGhpcy5fdXBkYXRlUG9zaXRpb259O3JldHVybiB0aGlzLl96b29tQW5pbWF0ZWQmJih0Lnpvb21hbmltPXRoaXMuX2FuaW1hdGVab29tKSx0fSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX21hcCYmdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZYKHRoaXMuX2NvbnRhaW5lciksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZKKHRoaXMuX2NvbnRhaW5lciksdGhpc30sX3VwZGF0ZUNvbnRlbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9jb250ZW50KXt2YXIgdD10aGlzLl9jb250ZW50Tm9kZSxpPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9jb250ZW50P3RoaXMuX2NvbnRlbnQodGhpcy5fc291cmNlfHx0aGlzKTp0aGlzLl9jb250ZW50O2lmKCJzdHJpbmciPT10eXBlb2YgaSl0LmlubmVySFRNTD1pO2Vsc2V7Zm9yKDt0Lmhhc0NoaWxkTm9kZXMoKTspdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3QuYXBwZW5kQ2hpbGQoaSl9dGhpcy5maXJlKCJjb250ZW50dXBkYXRlIil9fSxfdXBkYXRlUG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSxpPXcodGhpcy5vcHRpb25zLm9mZnNldCksZT10aGlzLl9nZXRBbmNob3IoKTt0aGlzLl96b29tQW5pbWF0ZWQ/YXQodGhpcy5fY29udGFpbmVyLHQuYWRkKGUpKTppPWkuYWRkKHQpLmFkZChlKTt2YXIgbj10aGlzLl9jb250YWluZXJCb3R0b209LWkueSxvPXRoaXMuX2NvbnRhaW5lckxlZnQ9LU1hdGgucm91bmQodGhpcy5fY29udGFpbmVyV2lkdGgvMikraS54O3RoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b209bisicHgiLHRoaXMuX2NvbnRhaW5lci5zdHlsZS5sZWZ0PW8rInB4In19LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm5bMCwwXX19KSxjbj1sbi5leHRlbmQoe29wdGlvbnM6e21heFdpZHRoOjMwMCxtaW5XaWR0aDo1MCxtYXhIZWlnaHQ6bnVsbCxhdXRvUGFuOiEwLGF1dG9QYW5QYWRkaW5nVG9wTGVmdDpudWxsLGF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHQ6bnVsbCxhdXRvUGFuUGFkZGluZzpbNSw1XSxrZWVwSW5WaWV3OiExLGNsb3NlQnV0dG9uOiEwLGF1dG9DbG9zZTohMCxjbG9zZU9uRXNjYXBlS2V5OiEwLGNsYXNzTmFtZToiIn0sb3Blbk9uOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wZW5Qb3B1cCh0aGlzKSx0aGlzfSxvbkFkZDpmdW5jdGlvbih0KXtsbi5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpLHQuZmlyZSgicG9wdXBvcGVuIix7cG9wdXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmKHRoaXMuX3NvdXJjZS5maXJlKCJwb3B1cG9wZW4iLHtwb3B1cDp0aGlzfSwhMCksdGhpcy5fc291cmNlIGluc3RhbmNlb2YgUWV8fHRoaXMuX3NvdXJjZS5vbigicHJlY2xpY2siLHl0KSl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe2xuLnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsdCksdC5maXJlKCJwb3B1cGNsb3NlIix7cG9wdXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmKHRoaXMuX3NvdXJjZS5maXJlKCJwb3B1cGNsb3NlIix7cG9wdXA6dGhpc30sITApLHRoaXMuX3NvdXJjZSBpbnN0YW5jZW9mIFFlfHx0aGlzLl9zb3VyY2Uub2ZmKCJwcmVjbGljayIseXQpKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9bG4ucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybih2b2lkIDAhPT10aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrP3RoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2s6dGhpcy5fbWFwLm9wdGlvbnMuY2xvc2VQb3B1cE9uQ2xpY2spJiYodC5wcmVjbGljaz10aGlzLl9jbG9zZSksdGhpcy5vcHRpb25zLmtlZXBJblZpZXcmJih0Lm1vdmVlbmQ9dGhpcy5fYWRqdXN0UGFuKSx0fSxfY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX21hcC5jbG9zZVBvcHVwKHRoaXMpfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PSJsZWFmbGV0LXBvcHVwIixpPXRoaXMuX2NvbnRhaW5lcj1HKCJkaXYiLHQrIiAiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHwiIikrIiBsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSxlPXRoaXMuX3dyYXBwZXI9RygiZGl2Iix0KyItY29udGVudC13cmFwcGVyIixpKTtpZih0aGlzLl9jb250ZW50Tm9kZT1HKCJkaXYiLHQrIi1jb250ZW50IixlKSx3dChlKSx4dCh0aGlzLl9jb250ZW50Tm9kZSksbXQoZSwiY29udGV4dG1lbnUiLHl0KSx0aGlzLl90aXBDb250YWluZXI9RygiZGl2Iix0KyItdGlwLWNvbnRhaW5lciIsaSksdGhpcy5fdGlwPUcoImRpdiIsdCsiLXRpcCIsdGhpcy5fdGlwQ29udGFpbmVyKSx0aGlzLm9wdGlvbnMuY2xvc2VCdXR0b24pe3ZhciBuPXRoaXMuX2Nsb3NlQnV0dG9uPUcoImEiLHQrIi1jbG9zZS1idXR0b24iLGkpO24uaHJlZj0iI2Nsb3NlIixuLmlubmVySFRNTD0iJiMyMTU7IixtdChuLCJjbGljayIsdGhpcy5fb25DbG9zZUJ1dHRvbkNsaWNrLHRoaXMpfX0sX3VwZGF0ZUxheW91dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRlbnROb2RlLGk9dC5zdHlsZTtpLndpZHRoPSIiLGkud2hpdGVTcGFjZT0ibm93cmFwIjt2YXIgZT10Lm9mZnNldFdpZHRoO2U9TWF0aC5taW4oZSx0aGlzLm9wdGlvbnMubWF4V2lkdGgpLGU9TWF0aC5tYXgoZSx0aGlzLm9wdGlvbnMubWluV2lkdGgpLGkud2lkdGg9ZSsxKyJweCIsaS53aGl0ZVNwYWNlPSIiLGkuaGVpZ2h0PSIiO3ZhciBuPXQub2Zmc2V0SGVpZ2h0LG89dGhpcy5vcHRpb25zLm1heEhlaWdodDtvJiZuPm8/KGkuaGVpZ2h0PW8rInB4IixRKHQsImxlYWZsZXQtcG9wdXAtc2Nyb2xsZWQiKSk6dHQodCwibGVhZmxldC1wb3B1cC1zY3JvbGxlZCIpLHRoaXMuX2NvbnRhaW5lcldpZHRoPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aH0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZyx0Lnpvb20sdC5jZW50ZXIpLGU9dGhpcy5fZ2V0QW5jaG9yKCk7YXQodGhpcy5fY29udGFpbmVyLGkuYWRkKGUpKX0sX2FkanVzdFBhbjpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5hdXRvUGFuKXt0aGlzLl9tYXAuX3BhbkFuaW0mJnRoaXMuX21hcC5fcGFuQW5pbS5zdG9wKCk7dmFyIHQ9dGhpcy5fbWFwLGk9cGFyc2VJbnQocSh0aGlzLl9jb250YWluZXIsIm1hcmdpbkJvdHRvbSIpLDEwKXx8MCxlPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQraSxuPXRoaXMuX2NvbnRhaW5lcldpZHRoLG89bmV3IHgodGhpcy5fY29udGFpbmVyTGVmdCwtZS10aGlzLl9jb250YWluZXJCb3R0b20pO28uX2FkZChodCh0aGlzLl9jb250YWluZXIpKTt2YXIgcz10LmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KG8pLHI9dyh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcpLGE9dyh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdUb3BMZWZ0fHxyKSxoPXcodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHR8fHIpLHU9dC5nZXRTaXplKCksbD0wLGM9MDtzLngrbitoLng+dS54JiYobD1zLngrbi11LngraC54KSxzLngtbC1hLng8MCYmKGw9cy54LWEueCkscy55K2UraC55PnUueSYmKGM9cy55K2UtdS55K2gueSkscy55LWMtYS55PDAmJihjPXMueS1hLnkpLChsfHxjKSYmdC5maXJlKCJhdXRvcGFuc3RhcnQiKS5wYW5CeShbbCxjXSl9fSxfb25DbG9zZUJ1dHRvbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX2Nsb3NlKCksTHQodCl9LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5fZ2V0UG9wdXBBbmNob3I/dGhpcy5fc291cmNlLl9nZXRQb3B1cEFuY2hvcigpOlswLDBdKX19KTtiZS5tZXJnZU9wdGlvbnMoe2Nsb3NlUG9wdXBPbkNsaWNrOiEwfSksYmUuaW5jbHVkZSh7b3BlblBvcHVwOmZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGNufHwodD1uZXcgY24oZSkuc2V0Q29udGVudCh0KSksaSYmdC5zZXRMYXRMbmcoaSksdGhpcy5oYXNMYXllcih0KT90aGlzOih0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAub3B0aW9ucy5hdXRvQ2xvc2UmJnRoaXMuY2xvc2VQb3B1cCgpLHRoaXMuX3BvcHVwPXQsdGhpcy5hZGRMYXllcih0KSl9LGNsb3NlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQhPT10aGlzLl9wb3B1cHx8KHQ9dGhpcy5fcG9wdXAsdGhpcy5fcG9wdXA9bnVsbCksdCYmdGhpcy5yZW1vdmVMYXllcih0KSx0aGlzfX0pLHFlLmluY2x1ZGUoe2JpbmRQb3B1cDpmdW5jdGlvbih0LGkpe3JldHVybiB0IGluc3RhbmNlb2YgY24/KGwodCxpKSx0aGlzLl9wb3B1cD10LHQuX3NvdXJjZT10aGlzKToodGhpcy5fcG9wdXAmJiFpfHwodGhpcy5fcG9wdXA9bmV3IGNuKGksdGhpcykpLHRoaXMuX3BvcHVwLnNldENvbnRlbnQodCkpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZHx8KHRoaXMub24oe2NsaWNrOnRoaXMuX29wZW5Qb3B1cCxrZXlwcmVzczp0aGlzLl9vbktleVByZXNzLHJlbW92ZTp0aGlzLmNsb3NlUG9wdXAsbW92ZTp0aGlzLl9tb3ZlUG9wdXB9KSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITApLHRoaXN9LHVuYmluZFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5vZmYoe2NsaWNrOnRoaXMuX29wZW5Qb3B1cCxrZXlwcmVzczp0aGlzLl9vbktleVByZXNzLHJlbW92ZTp0aGlzLmNsb3NlUG9wdXAsbW92ZTp0aGlzLl9tb3ZlUG9wdXB9KSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITEsdGhpcy5fcG9wdXA9bnVsbCksdGhpc30sb3BlblBvcHVwOmZ1bmN0aW9uKHQsaSl7aWYodCBpbnN0YW5jZW9mIHFlfHwoaT10LHQ9dGhpcyksdCBpbnN0YW5jZW9mIEtlKWZvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpe3Q9dGhpcy5fbGF5ZXJzW2VdO2JyZWFrfXJldHVybiBpfHwoaT10LmdldENlbnRlcj90LmdldENlbnRlcigpOnQuZ2V0TGF0TG5nKCkpLHRoaXMuX3BvcHVwJiZ0aGlzLl9tYXAmJih0aGlzLl9wb3B1cC5fc291cmNlPXQsdGhpcy5fcG9wdXAudXBkYXRlKCksdGhpcy5fbWFwLm9wZW5Qb3B1cCh0aGlzLl9wb3B1cCxpKSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2Nsb3NlKCksdGhpc30sdG9nZ2xlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAuX21hcD90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cCh0KSksdGhpc30saXNQb3B1cE9wZW46ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5pc09wZW4oKX0sc2V0UG9wdXBDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0Q29udGVudCh0KSx0aGlzfSxnZXRQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sX29wZW5Qb3B1cDpmdW5jdGlvbih0KXt2YXIgaT10LmxheWVyfHx0LnRhcmdldDt0aGlzLl9wb3B1cCYmdGhpcy5fbWFwJiYoTHQodCksaSBpbnN0YW5jZW9mIFFlP3RoaXMub3BlblBvcHVwKHQubGF5ZXJ8fHQudGFyZ2V0LHQubGF0bG5nKTp0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcy5fcG9wdXApJiZ0aGlzLl9wb3B1cC5fc291cmNlPT09aT90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cChpLHQubGF0bG5nKSl9LF9tb3ZlUG9wdXA6ZnVuY3Rpb24odCl7dGhpcy5fcG9wdXAuc2V0TGF0TG5nKHQubGF0bG5nKX0sX29uS2V5UHJlc3M6ZnVuY3Rpb24odCl7MTM9PT10Lm9yaWdpbmFsRXZlbnQua2V5Q29kZSYmdGhpcy5fb3BlblBvcHVwKHQpfX0pO3ZhciBfbj1sbi5leHRlbmQoe29wdGlvbnM6e3BhbmU6InRvb2x0aXBQYW5lIixvZmZzZXQ6WzAsMF0sZGlyZWN0aW9uOiJhdXRvIixwZXJtYW5lbnQ6ITEsc3RpY2t5OiExLGludGVyYWN0aXZlOiExLG9wYWNpdHk6Ljl9LG9uQWRkOmZ1bmN0aW9uKHQpe2xuLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCksdGhpcy5zZXRPcGFjaXR5KHRoaXMub3B0aW9ucy5vcGFjaXR5KSx0LmZpcmUoInRvb2x0aXBvcGVuIix7dG9vbHRpcDp0aGlzfSksdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2UuZmlyZSgidG9vbHRpcG9wZW4iLHt0b29sdGlwOnRoaXN9LCEwKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7bG4ucHJvdG90eXBlLm9uUmVtb3ZlLmNhbGwodGhpcyx0KSx0LmZpcmUoInRvb2x0aXBjbG9zZSIse3Rvb2x0aXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLmZpcmUoInRvb2x0aXBjbG9zZSIse3Rvb2x0aXA6dGhpc30sITApfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1sbi5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuIHFpJiYhdGhpcy5vcHRpb25zLnBlcm1hbmVudCYmKHQucHJlY2xpY2s9dGhpcy5fY2xvc2UpLHR9LF9jbG9zZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmdGhpcy5fbWFwLmNsb3NlVG9vbHRpcCh0aGlzKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD0ibGVhZmxldC10b29sdGlwICIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWV8fCIiKSsiIGxlYWZsZXQtem9vbS0iKyh0aGlzLl96b29tQW5pbWF0ZWQ/ImFuaW1hdGVkIjoiaGlkZSIpO3RoaXMuX2NvbnRlbnROb2RlPXRoaXMuX2NvbnRhaW5lcj1HKCJkaXYiLHQpfSxfdXBkYXRlTGF5b3V0OmZ1bmN0aW9uKCl7fSxfYWRqdXN0UGFuOmZ1bmN0aW9uKCl7fSxfc2V0UG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9dGhpcy5fY29udGFpbmVyLG49aS5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0Q2VudGVyKCkpLG89aS5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0KSxzPXRoaXMub3B0aW9ucy5kaXJlY3Rpb24scj1lLm9mZnNldFdpZHRoLGE9ZS5vZmZzZXRIZWlnaHQsaD13KHRoaXMub3B0aW9ucy5vZmZzZXQpLHU9dGhpcy5fZ2V0QW5jaG9yKCk7InRvcCI9PT1zP3Q9dC5hZGQodygtci8yK2gueCwtYStoLnkrdS55LCEwKSk6ImJvdHRvbSI9PT1zP3Q9dC5zdWJ0cmFjdCh3KHIvMi1oLngsLWgueSwhMCkpOiJjZW50ZXIiPT09cz90PXQuc3VidHJhY3QodyhyLzIraC54LGEvMi11LnkraC55LCEwKSk6InJpZ2h0Ij09PXN8fCJhdXRvIj09PXMmJm8ueDxuLng/KHM9InJpZ2h0Iix0PXQuYWRkKHcoaC54K3UueCx1LnktYS8yK2gueSwhMCkpKToocz0ibGVmdCIsdD10LnN1YnRyYWN0KHcocit1LngtaC54LGEvMi11LnktaC55LCEwKSkpLHR0KGUsImxlYWZsZXQtdG9vbHRpcC1yaWdodCIpLHR0KGUsImxlYWZsZXQtdG9vbHRpcC1sZWZ0IiksdHQoZSwibGVhZmxldC10b29sdGlwLXRvcCIpLHR0KGUsImxlYWZsZXQtdG9vbHRpcC1ib3R0b20iKSxRKGUsImxlYWZsZXQtdG9vbHRpcC0iK3MpLGF0KGUsdCl9LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKTt0aGlzLl9zZXRQb3NpdGlvbih0KX0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMub3BhY2l0eT10LHRoaXMuX2NvbnRhaW5lciYmbnQodGhpcy5fY29udGFpbmVyLHQpfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcik7dGhpcy5fc2V0UG9zaXRpb24oaSl9LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5fZ2V0VG9vbHRpcEFuY2hvciYmIXRoaXMub3B0aW9ucy5zdGlja3k/dGhpcy5fc291cmNlLl9nZXRUb29sdGlwQW5jaG9yKCk6WzAsMF0pfX0pO2JlLmluY2x1ZGUoe29wZW5Ub29sdGlwOmZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIF9ufHwodD1uZXcgX24oZSkuc2V0Q29udGVudCh0KSksaSYmdC5zZXRMYXRMbmcoaSksdGhpcy5oYXNMYXllcih0KT90aGlzOnRoaXMuYWRkTGF5ZXIodCl9LGNsb3NlVG9vbHRpcDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5yZW1vdmVMYXllcih0KSx0aGlzfX0pLHFlLmluY2x1ZGUoe2JpbmRUb29sdGlwOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBfbj8obCh0LGkpLHRoaXMuX3Rvb2x0aXA9dCx0Ll9zb3VyY2U9dGhpcyk6KHRoaXMuX3Rvb2x0aXAmJiFpfHwodGhpcy5fdG9vbHRpcD1uZXcgX24oaSx0aGlzKSksdGhpcy5fdG9vbHRpcC5zZXRDb250ZW50KHQpKSx0aGlzLl9pbml0VG9vbHRpcEludGVyYWN0aW9ucygpLHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQmJnRoaXMuX21hcCYmdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpJiZ0aGlzLm9wZW5Ub29sdGlwKCksdGhpc30sdW5iaW5kVG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5faW5pdFRvb2x0aXBJbnRlcmFjdGlvbnMoITApLHRoaXMuY2xvc2VUb29sdGlwKCksdGhpcy5fdG9vbHRpcD1udWxsKSx0aGlzfSxfaW5pdFRvb2x0aXBJbnRlcmFjdGlvbnM6ZnVuY3Rpb24odCl7aWYodHx8IXRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkKXt2YXIgaT10PyJvZmYiOiJvbiIsZT17cmVtb3ZlOnRoaXMuY2xvc2VUb29sdGlwLG1vdmU6dGhpcy5fbW92ZVRvb2x0aXB9O3RoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQ/ZS5hZGQ9dGhpcy5fb3BlblRvb2x0aXA6KGUubW91c2VvdmVyPXRoaXMuX29wZW5Ub29sdGlwLGUubW91c2VvdXQ9dGhpcy5jbG9zZVRvb2x0aXAsdGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreSYmKGUubW91c2Vtb3ZlPXRoaXMuX21vdmVUb29sdGlwKSxxaSYmKGUuY2xpY2s9dGhpcy5fb3BlblRvb2x0aXApKSx0aGlzW2ldKGUpLHRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkPSF0fX0sb3BlblRvb2x0aXA6ZnVuY3Rpb24odCxpKXtpZih0IGluc3RhbmNlb2YgcWV8fChpPXQsdD10aGlzKSx0IGluc3RhbmNlb2YgS2UpZm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl7dD10aGlzLl9sYXllcnNbZV07YnJlYWt9cmV0dXJuIGl8fChpPXQuZ2V0Q2VudGVyP3QuZ2V0Q2VudGVyKCk6dC5nZXRMYXRMbmcoKSksdGhpcy5fdG9vbHRpcCYmdGhpcy5fbWFwJiYodGhpcy5fdG9vbHRpcC5fc291cmNlPXQsdGhpcy5fdG9vbHRpcC51cGRhdGUoKSx0aGlzLl9tYXAub3BlblRvb2x0aXAodGhpcy5fdG9vbHRpcCxpKSx0aGlzLl90b29sdGlwLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciYmKFEodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyLCJsZWFmbGV0LWNsaWNrYWJsZSIpLHRoaXMuYWRkSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyKSkpLHRoaXN9LGNsb3NlVG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5fdG9vbHRpcC5fY2xvc2UoKSx0aGlzLl90b29sdGlwLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciYmKHR0KHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciwibGVhZmxldC1jbGlja2FibGUiKSx0aGlzLnJlbW92ZUludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lcikpKSx0aGlzfSx0b2dnbGVUb29sdGlwOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5fdG9vbHRpcC5fbWFwP3RoaXMuY2xvc2VUb29sdGlwKCk6dGhpcy5vcGVuVG9vbHRpcCh0KSksdGhpc30saXNUb29sdGlwT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwLmlzT3BlbigpfSxzZXRUb29sdGlwQ29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdG9vbHRpcCYmdGhpcy5fdG9vbHRpcC5zZXRDb250ZW50KHQpLHRoaXN9LGdldFRvb2x0aXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG9vbHRpcH0sX29wZW5Ub29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBpPXQubGF5ZXJ8fHQudGFyZ2V0O3RoaXMuX3Rvb2x0aXAmJnRoaXMuX21hcCYmdGhpcy5vcGVuVG9vbHRpcChpLHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5zdGlja3k/dC5sYXRsbmc6dm9pZCAwKX0sX21vdmVUb29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj10LmxhdGxuZzt0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5JiZ0Lm9yaWdpbmFsRXZlbnQmJihpPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0Lm9yaWdpbmFsRXZlbnQpLGU9dGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGkpLG49dGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhlKSksdGhpcy5fdG9vbHRpcC5zZXRMYXRMbmcobil9fSk7dmFyIGRuPVllLmV4dGVuZCh7b3B0aW9uczp7aWNvblNpemU6WzEyLDEyXSxodG1sOiExLGJnUG9zOm51bGwsY2xhc3NOYW1lOiJsZWFmbGV0LWRpdi1pY29uIn0sY3JlYXRlSWNvbjpmdW5jdGlvbih0KXt2YXIgaT10JiYiRElWIj09PXQudGFnTmFtZT90OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGU9dGhpcy5vcHRpb25zO2lmKGkuaW5uZXJIVE1MPSExIT09ZS5odG1sP2UuaHRtbDoiIixlLmJnUG9zKXt2YXIgbj13KGUuYmdQb3MpO2kuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uPS1uLngrInB4ICIrLW4ueSsicHgifXJldHVybiB0aGlzLl9zZXRJY29uU3R5bGVzKGksImljb24iKSxpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KTtZZS5EZWZhdWx0PVhlO3ZhciBwbj1xZS5leHRlbmQoe29wdGlvbnM6e3RpbGVTaXplOjI1NixvcGFjaXR5OjEsdXBkYXRlV2hlbklkbGU6V2ksdXBkYXRlV2hlblpvb21pbmc6ITAsdXBkYXRlSW50ZXJ2YWw6MjAwLHpJbmRleDoxLGJvdW5kczpudWxsLG1pblpvb206MCxtYXhab29tOnZvaWQgMCxtYXhOYXRpdmVab29tOnZvaWQgMCxtaW5OYXRpdmVab29tOnZvaWQgMCxub1dyYXA6ITEscGFuZToidGlsZVBhbmUiLGNsYXNzTmFtZToiIixrZWVwQnVmZmVyOjJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7bCh0aGlzLHQpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2luaXRDb250YWluZXIoKSx0aGlzLl9sZXZlbHM9e30sdGhpcy5fdGlsZXM9e30sdGhpcy5fcmVzZXRWaWV3KCksdGhpcy5fdXBkYXRlKCl9LGJlZm9yZUFkZDpmdW5jdGlvbih0KXt0Ll9hZGRab29tTGltaXQodGhpcyl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZUFsbFRpbGVzKCksSyh0aGlzLl9jb250YWluZXIpLHQuX3JlbW92ZVpvb21MaW1pdCh0aGlzKSx0aGlzLl9jb250YWluZXI9bnVsbCx0aGlzLl90aWxlWm9vbT12b2lkIDB9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJihYKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1heCkpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKEoodGhpcy5fY29udGFpbmVyKSx0aGlzLl9zZXRBdXRvWkluZGV4KE1hdGgubWluKSksdGhpc30sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sc2V0WkluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4PXQsdGhpcy5fdXBkYXRlWkluZGV4KCksdGhpc30saXNMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmd9LHJlZHJhdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9yZW1vdmVBbGxUaWxlcygpLHRoaXMuX3VwZGF0ZSgpKSx0aGlzfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17dmlld3ByZXJlc2V0OnRoaXMuX2ludmFsaWRhdGVBbGwsdmlld3Jlc2V0OnRoaXMuX3Jlc2V0Vmlldyx6b29tOnRoaXMuX3Jlc2V0Vmlldyxtb3ZlZW5kOnRoaXMuX29uTW92ZUVuZH07cmV0dXJuIHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZXx8KHRoaXMuX29uTW92ZXx8KHRoaXMuX29uTW92ZT1vKHRoaXMuX29uTW92ZUVuZCx0aGlzLm9wdGlvbnMudXBkYXRlSW50ZXJ2YWwsdGhpcykpLHQubW92ZT10aGlzLl9vbk1vdmUpLHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LGNyZWF0ZVRpbGU6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9LGdldFRpbGVTaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnRpbGVTaXplO3JldHVybiB0IGluc3RhbmNlb2YgeD90Om5ldyB4KHQsdCl9LF91cGRhdGVaSW5kZXg6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXImJnZvaWQgMCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJm51bGwhPT10aGlzLm9wdGlvbnMuekluZGV4JiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnpJbmRleD10aGlzLm9wdGlvbnMuekluZGV4KX0sX3NldEF1dG9aSW5kZXg6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLGU9dGhpcy5nZXRQYW5lKCkuY2hpbGRyZW4sbj0tdCgtMS8wLDEvMCksbz0wLHM9ZS5sZW5ndGg7bzxzO28rKylpPWVbb10uc3R5bGUuekluZGV4LGVbb10hPT10aGlzLl9jb250YWluZXImJmkmJihuPXQobiwraSkpO2lzRmluaXRlKG4pJiYodGhpcy5vcHRpb25zLnpJbmRleD1uK3QoLTEsMSksdGhpcy5fdXBkYXRlWkluZGV4KCkpfSxfdXBkYXRlT3BhY2l0eTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCYmIUxpKXtudCh0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zLm9wYWNpdHkpO3ZhciB0PStuZXcgRGF0ZSxpPSExLGU9ITE7Zm9yKHZhciBuIGluIHRoaXMuX3RpbGVzKXt2YXIgbz10aGlzLl90aWxlc1tuXTtpZihvLmN1cnJlbnQmJm8ubG9hZGVkKXt2YXIgcz1NYXRoLm1pbigxLCh0LW8ubG9hZGVkKS8yMDApO250KG8uZWwscyksczwxP2k9ITA6KG8uYWN0aXZlP2U9ITA6dGhpcy5fb25PcGFxdWVUaWxlKG8pLG8uYWN0aXZlPSEwKX19ZSYmIXRoaXMuX25vUHJ1bmUmJnRoaXMuX3BydW5lVGlsZXMoKSxpJiYoZyh0aGlzLl9mYWRlRnJhbWUpLHRoaXMuX2ZhZGVGcmFtZT1mKHRoaXMuX3VwZGF0ZU9wYWNpdHksdGhpcykpfX0sX29uT3BhcXVlVGlsZTpyLF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyfHwodGhpcy5fY29udGFpbmVyPUcoImRpdiIsImxlYWZsZXQtbGF5ZXIgIisodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8IiIpKSx0aGlzLl91cGRhdGVaSW5kZXgoKSx0aGlzLm9wdGlvbnMub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSl9LF91cGRhdGVMZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlWm9vbSxpPXRoaXMub3B0aW9ucy5tYXhab29tO2lmKHZvaWQgMCE9PXQpe2Zvcih2YXIgZSBpbiB0aGlzLl9sZXZlbHMpdGhpcy5fbGV2ZWxzW2VdLmVsLmNoaWxkcmVuLmxlbmd0aHx8ZT09PXQ/KHRoaXMuX2xldmVsc1tlXS5lbC5zdHlsZS56SW5kZXg9aS1NYXRoLmFicyh0LWUpLHRoaXMuX29uVXBkYXRlTGV2ZWwoZSkpOihLKHRoaXMuX2xldmVsc1tlXS5lbCksdGhpcy5fcmVtb3ZlVGlsZXNBdFpvb20oZSksdGhpcy5fb25SZW1vdmVMZXZlbChlKSxkZWxldGUgdGhpcy5fbGV2ZWxzW2VdKTt2YXIgbj10aGlzLl9sZXZlbHNbdF0sbz10aGlzLl9tYXA7cmV0dXJuIG58fCgobj10aGlzLl9sZXZlbHNbdF09e30pLmVsPUcoImRpdiIsImxlYWZsZXQtdGlsZS1jb250YWluZXIgbGVhZmxldC16b29tLWFuaW1hdGVkIix0aGlzLl9jb250YWluZXIpLG4uZWwuc3R5bGUuekluZGV4PWksbi5vcmlnaW49by5wcm9qZWN0KG8udW5wcm9qZWN0KG8uZ2V0UGl4ZWxPcmlnaW4oKSksdCkucm91bmQoKSxuLnpvb209dCx0aGlzLl9zZXRab29tVHJhbnNmb3JtKG4sby5nZXRDZW50ZXIoKSxvLmdldFpvb20oKSksbi5lbC5vZmZzZXRXaWR0aCx0aGlzLl9vbkNyZWF0ZUxldmVsKG4pKSx0aGlzLl9sZXZlbD1uLG59fSxfb25VcGRhdGVMZXZlbDpyLF9vblJlbW92ZUxldmVsOnIsX29uQ3JlYXRlTGV2ZWw6cixfcHJ1bmVUaWxlczpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQsaSxlPXRoaXMuX21hcC5nZXRab29tKCk7aWYoZT50aGlzLm9wdGlvbnMubWF4Wm9vbXx8ZTx0aGlzLm9wdGlvbnMubWluWm9vbSl0aGlzLl9yZW1vdmVBbGxUaWxlcygpO2Vsc2V7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpKGk9dGhpcy5fdGlsZXNbdF0pLnJldGFpbj1pLmN1cnJlbnQ7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpaWYoKGk9dGhpcy5fdGlsZXNbdF0pLmN1cnJlbnQmJiFpLmFjdGl2ZSl7dmFyIG49aS5jb29yZHM7dGhpcy5fcmV0YWluUGFyZW50KG4ueCxuLnksbi56LG4uei01KXx8dGhpcy5fcmV0YWluQ2hpbGRyZW4obi54LG4ueSxuLnosbi56KzIpfWZvcih0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW3RdLnJldGFpbnx8dGhpcy5fcmVtb3ZlVGlsZSh0KX19fSxfcmVtb3ZlVGlsZXNBdFpvb206ZnVuY3Rpb24odCl7Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW2ldLmNvb3Jkcy56PT09dCYmdGhpcy5fcmVtb3ZlVGlsZShpKX0sX3JlbW92ZUFsbFRpbGVzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCl9LF9pbnZhbGlkYXRlQWxsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xldmVscylLKHRoaXMuX2xldmVsc1t0XS5lbCksdGhpcy5fb25SZW1vdmVMZXZlbCh0KSxkZWxldGUgdGhpcy5fbGV2ZWxzW3RdO3RoaXMuX3JlbW92ZUFsbFRpbGVzKCksdGhpcy5fdGlsZVpvb209dm9pZCAwfSxfcmV0YWluUGFyZW50OmZ1bmN0aW9uKHQsaSxlLG4pe3ZhciBvPU1hdGguZmxvb3IodC8yKSxzPU1hdGguZmxvb3IoaS8yKSxyPWUtMSxhPW5ldyB4KCtvLCtzKTthLno9K3I7dmFyIGg9dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGEpLHU9dGhpcy5fdGlsZXNbaF07cmV0dXJuIHUmJnUuYWN0aXZlPyh1LnJldGFpbj0hMCwhMCk6KHUmJnUubG9hZGVkJiYodS5yZXRhaW49ITApLHI+biYmdGhpcy5fcmV0YWluUGFyZW50KG8scyxyLG4pKX0sX3JldGFpbkNoaWxkcmVuOmZ1bmN0aW9uKHQsaSxlLG4pe2Zvcih2YXIgbz0yKnQ7bzwyKnQrMjtvKyspZm9yKHZhciBzPTIqaTtzPDIqaSsyO3MrKyl7dmFyIHI9bmV3IHgobyxzKTtyLno9ZSsxO3ZhciBhPXRoaXMuX3RpbGVDb29yZHNUb0tleShyKSxoPXRoaXMuX3RpbGVzW2FdO2gmJmguYWN0aXZlP2gucmV0YWluPSEwOihoJiZoLmxvYWRlZCYmKGgucmV0YWluPSEwKSxlKzE8biYmdGhpcy5fcmV0YWluQ2hpbGRyZW4obyxzLGUrMSxuKSl9fSxfcmVzZXRWaWV3OmZ1bmN0aW9uKHQpe3ZhciBpPXQmJih0LnBpbmNofHx0LmZseVRvKTt0aGlzLl9zZXRWaWV3KHRoaXMuX21hcC5nZXRDZW50ZXIoKSx0aGlzLl9tYXAuZ2V0Wm9vbSgpLGksaSl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt0aGlzLl9zZXRWaWV3KHQuY2VudGVyLHQuem9vbSwhMCx0Lm5vVXBkYXRlKX0sX2NsYW1wWm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHZvaWQgMCE9PWkubWluTmF0aXZlWm9vbSYmdDxpLm1pbk5hdGl2ZVpvb20/aS5taW5OYXRpdmVab29tOnZvaWQgMCE9PWkubWF4TmF0aXZlWm9vbSYmaS5tYXhOYXRpdmVab29tPHQ/aS5tYXhOYXRpdmVab29tOnR9LF9zZXRWaWV3OmZ1bmN0aW9uKHQsaSxlLG4pe3ZhciBvPXRoaXMuX2NsYW1wWm9vbShNYXRoLnJvdW5kKGkpKTsodm9pZCAwIT09dGhpcy5vcHRpb25zLm1heFpvb20mJm8+dGhpcy5vcHRpb25zLm1heFpvb218fHZvaWQgMCE9PXRoaXMub3B0aW9ucy5taW5ab29tJiZvPHRoaXMub3B0aW9ucy5taW5ab29tKSYmKG89dm9pZCAwKTt2YXIgcz10aGlzLm9wdGlvbnMudXBkYXRlV2hlblpvb21pbmcmJm8hPT10aGlzLl90aWxlWm9vbTtuJiYhc3x8KHRoaXMuX3RpbGVab29tPW8sdGhpcy5fYWJvcnRMb2FkaW5nJiZ0aGlzLl9hYm9ydExvYWRpbmcoKSx0aGlzLl91cGRhdGVMZXZlbHMoKSx0aGlzLl9yZXNldEdyaWQoKSx2b2lkIDAhPT1vJiZ0aGlzLl91cGRhdGUodCksZXx8dGhpcy5fcHJ1bmVUaWxlcygpLHRoaXMuX25vUHJ1bmU9ISFlKSx0aGlzLl9zZXRab29tVHJhbnNmb3Jtcyh0LGkpfSxfc2V0Wm9vbVRyYW5zZm9ybXM6ZnVuY3Rpb24odCxpKXtmb3IodmFyIGUgaW4gdGhpcy5fbGV2ZWxzKXRoaXMuX3NldFpvb21UcmFuc2Zvcm0odGhpcy5fbGV2ZWxzW2VdLHQsaSl9LF9zZXRab29tVHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSxlKXt2YXIgbj10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKGUsdC56b29tKSxvPXQub3JpZ2luLm11bHRpcGx5Qnkobikuc3VidHJhY3QodGhpcy5fbWFwLl9nZXROZXdQaXhlbE9yaWdpbihpLGUpKS5yb3VuZCgpO2ppP3J0KHQuZWwsbyxuKTphdCh0LmVsLG8pfSxfcmVzZXRHcmlkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGk9dC5vcHRpb25zLmNycyxlPXRoaXMuX3RpbGVTaXplPXRoaXMuZ2V0VGlsZVNpemUoKSxuPXRoaXMuX3RpbGVab29tLG89dGhpcy5fbWFwLmdldFBpeGVsV29ybGRCb3VuZHModGhpcy5fdGlsZVpvb20pO28mJih0aGlzLl9nbG9iYWxUaWxlUmFuZ2U9dGhpcy5fcHhCb3VuZHNUb1RpbGVSYW5nZShvKSksdGhpcy5fd3JhcFg9aS53cmFwTG5nJiYhdGhpcy5vcHRpb25zLm5vV3JhcCYmW01hdGguZmxvb3IodC5wcm9qZWN0KFswLGkud3JhcExuZ1swXV0sbikueC9lLngpLE1hdGguY2VpbCh0LnByb2plY3QoWzAsaS53cmFwTG5nWzFdXSxuKS54L2UueSldLHRoaXMuX3dyYXBZPWkud3JhcExhdCYmIXRoaXMub3B0aW9ucy5ub1dyYXAmJltNYXRoLmZsb29yKHQucHJvamVjdChbaS53cmFwTGF0WzBdLDBdLG4pLnkvZS54KSxNYXRoLmNlaWwodC5wcm9qZWN0KFtpLndyYXBMYXRbMV0sMF0sbikueS9lLnkpXX0sX29uTW92ZUVuZDpmdW5jdGlvbigpe3RoaXMuX21hcCYmIXRoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fdXBkYXRlKCl9LF9nZXRUaWxlZFBpeGVsQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcCxlPWkuX2FuaW1hdGluZ1pvb20/TWF0aC5tYXgoaS5fYW5pbWF0ZVRvWm9vbSxpLmdldFpvb20oKSk6aS5nZXRab29tKCksbj1pLmdldFpvb21TY2FsZShlLHRoaXMuX3RpbGVab29tKSxvPWkucHJvamVjdCh0LHRoaXMuX3RpbGVab29tKS5mbG9vcigpLHM9aS5nZXRTaXplKCkuZGl2aWRlQnkoMipuKTtyZXR1cm4gbmV3IFAoby5zdWJ0cmFjdChzKSxvLmFkZChzKSl9LF91cGRhdGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwO2lmKGkpe3ZhciBlPXRoaXMuX2NsYW1wWm9vbShpLmdldFpvb20oKSk7aWYodm9pZCAwPT09dCYmKHQ9aS5nZXRDZW50ZXIoKSksdm9pZCAwIT09dGhpcy5fdGlsZVpvb20pe3ZhciBuPXRoaXMuX2dldFRpbGVkUGl4ZWxCb3VuZHModCksbz10aGlzLl9weEJvdW5kc1RvVGlsZVJhbmdlKG4pLHM9by5nZXRDZW50ZXIoKSxyPVtdLGE9dGhpcy5vcHRpb25zLmtlZXBCdWZmZXIsaD1uZXcgUChvLmdldEJvdHRvbUxlZnQoKS5zdWJ0cmFjdChbYSwtYV0pLG8uZ2V0VG9wUmlnaHQoKS5hZGQoW2EsLWFdKSk7aWYoIShpc0Zpbml0ZShvLm1pbi54KSYmaXNGaW5pdGUoby5taW4ueSkmJmlzRmluaXRlKG8ubWF4LngpJiZpc0Zpbml0ZShvLm1heC55KSkpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gbG9hZCBhbiBpbmZpbml0ZSBudW1iZXIgb2YgdGlsZXMiKTtmb3IodmFyIHUgaW4gdGhpcy5fdGlsZXMpe3ZhciBsPXRoaXMuX3RpbGVzW3VdLmNvb3JkcztsLno9PT10aGlzLl90aWxlWm9vbSYmaC5jb250YWlucyhuZXcgeChsLngsbC55KSl8fCh0aGlzLl90aWxlc1t1XS5jdXJyZW50PSExKX1pZihNYXRoLmFicyhlLXRoaXMuX3RpbGVab29tKT4xKXRoaXMuX3NldFZpZXcodCxlKTtlbHNle2Zvcih2YXIgYz1vLm1pbi55O2M8PW8ubWF4Lnk7YysrKWZvcih2YXIgXz1vLm1pbi54O188PW8ubWF4Lng7XysrKXt2YXIgZD1uZXcgeChfLGMpO2lmKGQuej10aGlzLl90aWxlWm9vbSx0aGlzLl9pc1ZhbGlkVGlsZShkKSl7dmFyIHA9dGhpcy5fdGlsZXNbdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGQpXTtwP3AuY3VycmVudD0hMDpyLnB1c2goZCl9fWlmKHIuc29ydChmdW5jdGlvbih0LGkpe3JldHVybiB0LmRpc3RhbmNlVG8ocyktaS5kaXN0YW5jZVRvKHMpfSksMCE9PXIubGVuZ3RoKXt0aGlzLl9sb2FkaW5nfHwodGhpcy5fbG9hZGluZz0hMCx0aGlzLmZpcmUoImxvYWRpbmciKSk7dmFyIG09ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2ZvcihfPTA7XzxyLmxlbmd0aDtfKyspdGhpcy5fYWRkVGlsZShyW19dLG0pO3RoaXMuX2xldmVsLmVsLmFwcGVuZENoaWxkKG0pfX19fX0sX2lzVmFsaWRUaWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcC5vcHRpb25zLmNycztpZighaS5pbmZpbml0ZSl7dmFyIGU9dGhpcy5fZ2xvYmFsVGlsZVJhbmdlO2lmKCFpLndyYXBMbmcmJih0Lng8ZS5taW4ueHx8dC54PmUubWF4LngpfHwhaS53cmFwTGF0JiYodC55PGUubWluLnl8fHQueT5lLm1heC55KSlyZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmJvdW5kcylyZXR1cm4hMDt2YXIgbj10aGlzLl90aWxlQ29vcmRzVG9Cb3VuZHModCk7cmV0dXJuIHoodGhpcy5vcHRpb25zLmJvdW5kcykub3ZlcmxhcHMobil9LF9rZXlUb0JvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdGlsZUNvb3Jkc1RvQm91bmRzKHRoaXMuX2tleVRvVGlsZUNvb3Jkcyh0KSl9LF90aWxlQ29vcmRzVG9Od1NlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcCxlPXRoaXMuZ2V0VGlsZVNpemUoKSxuPXQuc2NhbGVCeShlKSxvPW4uYWRkKGUpO3JldHVybltpLnVucHJvamVjdChuLHQueiksaS51bnByb2plY3Qobyx0LnopXX0sX3RpbGVDb29yZHNUb0JvdW5kczpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl90aWxlQ29vcmRzVG9Od1NlKHQpLGU9bmV3IFQoaVswXSxpWzFdKTtyZXR1cm4gdGhpcy5vcHRpb25zLm5vV3JhcHx8KGU9dGhpcy5fbWFwLndyYXBMYXRMbmdCb3VuZHMoZSkpLGV9LF90aWxlQ29vcmRzVG9LZXk6ZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiOiIrdC55KyI6Iit0Lnp9LF9rZXlUb1RpbGVDb29yZHM6ZnVuY3Rpb24odCl7dmFyIGk9dC5zcGxpdCgiOiIpLGU9bmV3IHgoK2lbMF0sK2lbMV0pO3JldHVybiBlLno9K2lbMl0sZX0sX3JlbW92ZVRpbGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fdGlsZXNbdF07aSYmKEsoaS5lbCksZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuZmlyZSgidGlsZXVubG9hZCIse3RpbGU6aS5lbCxjb29yZHM6dGhpcy5fa2V5VG9UaWxlQ29vcmRzKHQpfSkpfSxfaW5pdFRpbGU6ZnVuY3Rpb24odCl7USh0LCJsZWFmbGV0LXRpbGUiKTt2YXIgaT10aGlzLmdldFRpbGVTaXplKCk7dC5zdHlsZS53aWR0aD1pLngrInB4Iix0LnN0eWxlLmhlaWdodD1pLnkrInB4Iix0Lm9uc2VsZWN0c3RhcnQ9cix0Lm9ubW91c2Vtb3ZlPXIsTGkmJnRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJm50KHQsdGhpcy5vcHRpb25zLm9wYWNpdHkpLHppJiYhTWkmJih0LnN0eWxlLldlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eT0iaGlkZGVuIil9LF9hZGRUaWxlOmZ1bmN0aW9uKHQsaSl7dmFyIG49dGhpcy5fZ2V0VGlsZVBvcyh0KSxvPXRoaXMuX3RpbGVDb29yZHNUb0tleSh0KSxzPXRoaXMuY3JlYXRlVGlsZSh0aGlzLl93cmFwQ29vcmRzKHQpLGUodGhpcy5fdGlsZVJlYWR5LHRoaXMsdCkpO3RoaXMuX2luaXRUaWxlKHMpLHRoaXMuY3JlYXRlVGlsZS5sZW5ndGg8MiYmZihlKHRoaXMuX3RpbGVSZWFkeSx0aGlzLHQsbnVsbCxzKSksYXQocyxuKSx0aGlzLl90aWxlc1tvXT17ZWw6cyxjb29yZHM6dCxjdXJyZW50OiEwfSxpLmFwcGVuZENoaWxkKHMpLHRoaXMuZmlyZSgidGlsZWxvYWRzdGFydCIse3RpbGU6cyxjb29yZHM6dH0pfSxfdGlsZVJlYWR5OmZ1bmN0aW9uKHQsaSxuKXtpJiZ0aGlzLmZpcmUoInRpbGVlcnJvciIse2Vycm9yOmksdGlsZTpuLGNvb3Jkczp0fSk7dmFyIG89dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KHQpOyhuPXRoaXMuX3RpbGVzW29dKSYmKG4ubG9hZGVkPStuZXcgRGF0ZSx0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD8obnQobi5lbCwwKSxnKHRoaXMuX2ZhZGVGcmFtZSksdGhpcy5fZmFkZUZyYW1lPWYodGhpcy5fdXBkYXRlT3BhY2l0eSx0aGlzKSk6KG4uYWN0aXZlPSEwLHRoaXMuX3BydW5lVGlsZXMoKSksaXx8KFEobi5lbCwibGVhZmxldC10aWxlLWxvYWRlZCIpLHRoaXMuZmlyZSgidGlsZWxvYWQiLHt0aWxlOm4uZWwsY29vcmRzOnR9KSksdGhpcy5fbm9UaWxlc1RvTG9hZCgpJiYodGhpcy5fbG9hZGluZz0hMSx0aGlzLmZpcmUoImxvYWQiKSxMaXx8IXRoaXMuX21hcC5fZmFkZUFuaW1hdGVkP2YodGhpcy5fcHJ1bmVUaWxlcyx0aGlzKTpzZXRUaW1lb3V0KGUodGhpcy5fcHJ1bmVUaWxlcyx0aGlzKSwyNTApKSl9LF9nZXRUaWxlUG9zOmZ1bmN0aW9uKHQpe3JldHVybiB0LnNjYWxlQnkodGhpcy5nZXRUaWxlU2l6ZSgpKS5zdWJ0cmFjdCh0aGlzLl9sZXZlbC5vcmlnaW4pfSxfd3JhcENvb3JkczpmdW5jdGlvbih0KXt2YXIgaT1uZXcgeCh0aGlzLl93cmFwWD9zKHQueCx0aGlzLl93cmFwWCk6dC54LHRoaXMuX3dyYXBZP3ModC55LHRoaXMuX3dyYXBZKTp0LnkpO3JldHVybiBpLno9dC56LGl9LF9weEJvdW5kc1RvVGlsZVJhbmdlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZ2V0VGlsZVNpemUoKTtyZXR1cm4gbmV3IFAodC5taW4udW5zY2FsZUJ5KGkpLmZsb29yKCksdC5tYXgudW5zY2FsZUJ5KGkpLmNlaWwoKS5zdWJ0cmFjdChbMSwxXSkpfSxfbm9UaWxlc1RvTG9hZDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcylpZighdGhpcy5fdGlsZXNbdF0ubG9hZGVkKXJldHVybiExO3JldHVybiEwfX0pLG1uPXBuLmV4dGVuZCh7b3B0aW9uczp7bWluWm9vbTowLG1heFpvb206MTgsc3ViZG9tYWluczoiYWJjIixlcnJvclRpbGVVcmw6IiIsem9vbU9mZnNldDowLHRtczohMSx6b29tUmV2ZXJzZTohMSxkZXRlY3RSZXRpbmE6ITEsY3Jvc3NPcmlnaW46ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXt0aGlzLl91cmw9dCwoaT1sKHRoaXMsaSkpLmRldGVjdFJldGluYSYmWWkmJmkubWF4Wm9vbT4wJiYoaS50aWxlU2l6ZT1NYXRoLmZsb29yKGkudGlsZVNpemUvMiksaS56b29tUmV2ZXJzZT8oaS56b29tT2Zmc2V0LS0saS5taW5ab29tKyspOihpLnpvb21PZmZzZXQrKyxpLm1heFpvb20tLSksaS5taW5ab29tPU1hdGgubWF4KDAsaS5taW5ab29tKSksInN0cmluZyI9PXR5cGVvZiBpLnN1YmRvbWFpbnMmJihpLnN1YmRvbWFpbnM9aS5zdWJkb21haW5zLnNwbGl0KCIiKSkseml8fHRoaXMub24oInRpbGV1bmxvYWQiLHRoaXMuX29uVGlsZVJlbW92ZSl9LHNldFVybDpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl91cmw9PT10JiZ2b2lkIDA9PT1pJiYoaT0hMCksdGhpcy5fdXJsPXQsaXx8dGhpcy5yZWRyYXcoKSx0aGlzfSxjcmVhdGVUaWxlOmZ1bmN0aW9uKHQsaSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7cmV0dXJuIG10KG4sImxvYWQiLGUodGhpcy5fdGlsZU9uTG9hZCx0aGlzLGksbikpLG10KG4sImVycm9yIixlKHRoaXMuX3RpbGVPbkVycm9yLHRoaXMsaSxuKSksKHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbnx8IiI9PT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pJiYobi5jcm9zc09yaWdpbj0hMD09PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbj8iIjp0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pLG4uYWx0PSIiLG4uc2V0QXR0cmlidXRlKCJyb2xlIiwicHJlc2VudGF0aW9uIiksbi5zcmM9dGhpcy5nZXRUaWxlVXJsKHQpLG59LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGU9e3I6WWk/IkAyeCI6IiIsczp0aGlzLl9nZXRTdWJkb21haW4odCkseDp0LngseTp0Lnksejp0aGlzLl9nZXRab29tRm9yVXJsKCl9O2lmKHRoaXMuX21hcCYmIXRoaXMuX21hcC5vcHRpb25zLmNycy5pbmZpbml0ZSl7dmFyIG49dGhpcy5fZ2xvYmFsVGlsZVJhbmdlLm1heC55LXQueTt0aGlzLm9wdGlvbnMudG1zJiYoZS55PW4pLGVbIi15Il09bn1yZXR1cm4gXyh0aGlzLl91cmwsaShlLHRoaXMub3B0aW9ucykpfSxfdGlsZU9uTG9hZDpmdW5jdGlvbih0LGkpe0xpP3NldFRpbWVvdXQoZSh0LHRoaXMsbnVsbCxpKSwwKTp0KG51bGwsaSl9LF90aWxlT25FcnJvcjpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5vcHRpb25zLmVycm9yVGlsZVVybDtuJiZpLmdldEF0dHJpYnV0ZSgic3JjIikhPT1uJiYoaS5zcmM9biksdChlLGkpfSxfb25UaWxlUmVtb3ZlOmZ1bmN0aW9uKHQpe3QudGlsZS5vbmxvYWQ9bnVsbH0sX2dldFpvb21Gb3JVcmw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlWm9vbSxpPXRoaXMub3B0aW9ucy5tYXhab29tLGU9dGhpcy5vcHRpb25zLnpvb21SZXZlcnNlLG49dGhpcy5vcHRpb25zLnpvb21PZmZzZXQ7cmV0dXJuIGUmJih0PWktdCksdCtufSxfZ2V0U3ViZG9tYWluOmZ1bmN0aW9uKHQpe3ZhciBpPU1hdGguYWJzKHQueCt0LnkpJXRoaXMub3B0aW9ucy5zdWJkb21haW5zLmxlbmd0aDtyZXR1cm4gdGhpcy5vcHRpb25zLnN1YmRvbWFpbnNbaV19LF9hYm9ydExvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgdCxpO2Zvcih0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW3RdLmNvb3Jkcy56IT09dGhpcy5fdGlsZVpvb20mJigoaT10aGlzLl90aWxlc1t0XS5lbCkub25sb2FkPXIsaS5vbmVycm9yPXIsaS5jb21wbGV0ZXx8KGkuc3JjPXNpLEsoaSksZGVsZXRlIHRoaXMuX3RpbGVzW3RdKSl9LF9yZW1vdmVUaWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX3RpbGVzW3RdO2lmKGkpcmV0dXJuIFNpfHxpLmVsLnNldEF0dHJpYnV0ZSgic3JjIixzaSkscG4ucHJvdG90eXBlLl9yZW1vdmVUaWxlLmNhbGwodGhpcyx0KX0sX3RpbGVSZWFkeTpmdW5jdGlvbih0LGksZSl7aWYodGhpcy5fbWFwJiYoIWV8fGUuZ2V0QXR0cmlidXRlKCJzcmMiKSE9PXNpKSlyZXR1cm4gcG4ucHJvdG90eXBlLl90aWxlUmVhZHkuY2FsbCh0aGlzLHQsaSxlKX19KSxmbj1tbi5leHRlbmQoe2RlZmF1bHRXbXNQYXJhbXM6e3NlcnZpY2U6IldNUyIscmVxdWVzdDoiR2V0TWFwIixsYXllcnM6IiIsc3R5bGVzOiIiLGZvcm1hdDoiaW1hZ2UvanBlZyIsdHJhbnNwYXJlbnQ6ITEsdmVyc2lvbjoiMS4xLjEifSxvcHRpb25zOntjcnM6bnVsbCx1cHBlcmNhc2U6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl91cmw9dDt2YXIgbj1pKHt9LHRoaXMuZGVmYXVsdFdtc1BhcmFtcyk7Zm9yKHZhciBvIGluIGUpbyBpbiB0aGlzLm9wdGlvbnN8fChuW29dPWVbb10pO3ZhciBzPShlPWwodGhpcyxlKSkuZGV0ZWN0UmV0aW5hJiZZaT8yOjEscj10aGlzLmdldFRpbGVTaXplKCk7bi53aWR0aD1yLngqcyxuLmhlaWdodD1yLnkqcyx0aGlzLndtc1BhcmFtcz1ufSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9jcnM9dGhpcy5vcHRpb25zLmNyc3x8dC5vcHRpb25zLmNycyx0aGlzLl93bXNWZXJzaW9uPXBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7dmFyIGk9dGhpcy5fd21zVmVyc2lvbj49MS4zPyJjcnMiOiJzcnMiO3RoaXMud21zUGFyYW1zW2ldPXRoaXMuX2Nycy5jb2RlLG1uLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCl9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fdGlsZUNvb3Jkc1RvTndTZSh0KSxlPXRoaXMuX2NycyxuPWIoZS5wcm9qZWN0KGlbMF0pLGUucHJvamVjdChpWzFdKSksbz1uLm1pbixzPW4ubWF4LHI9KHRoaXMuX3dtc1ZlcnNpb24+PTEuMyYmdGhpcy5fY3JzPT09VWU/W28ueSxvLngscy55LHMueF06W28ueCxvLnkscy54LHMueV0pLmpvaW4oIiwiKSxhPW1uLnByb3RvdHlwZS5nZXRUaWxlVXJsLmNhbGwodGhpcyx0KTtyZXR1cm4gYStjKHRoaXMud21zUGFyYW1zLGEsdGhpcy5vcHRpb25zLnVwcGVyY2FzZSkrKHRoaXMub3B0aW9ucy51cHBlcmNhc2U/IiZCQk9YPSI6IiZiYm94PSIpK3J9LHNldFBhcmFtczpmdW5jdGlvbih0LGUpe3JldHVybiBpKHRoaXMud21zUGFyYW1zLHQpLGV8fHRoaXMucmVkcmF3KCksdGhpc319KTttbi5XTVM9Zm4sSnQud21zPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBmbih0LGkpfTt2YXIgZ249cWUuZXh0ZW5kKHtvcHRpb25zOntwYWRkaW5nOi4xLHRvbGVyYW5jZTowfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2wodGhpcyx0KSxuKHRoaXMpLHRoaXMuX2xheWVycz10aGlzLl9sYXllcnN8fHt9fSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2luaXRDb250YWluZXIoKSx0aGlzLl96b29tQW5pbWF0ZWQmJlEodGhpcy5fY29udGFpbmVyLCJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLl91cGRhdGUoKSx0aGlzLm9uKCJ1cGRhdGUiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMub2ZmKCJ1cGRhdGUiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpLHRoaXMuX2Rlc3Ryb3lDb250YWluZXIoKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3ZpZXdyZXNldDp0aGlzLl9yZXNldCx6b29tOnRoaXMuX29uWm9vbSxtb3ZlZW5kOnRoaXMuX3VwZGF0ZSx6b29tZW5kOnRoaXMuX29uWm9vbUVuZH07cmV0dXJuIHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fb25BbmltWm9vbSksdH0sX29uQW5pbVpvb206ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlVHJhbnNmb3JtKHQuY2VudGVyLHQuem9vbSl9LF9vblpvb206ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVUcmFuc2Zvcm0odGhpcy5fbWFwLmdldENlbnRlcigpLHRoaXMuX21hcC5nZXRab29tKCkpfSxfdXBkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fbWFwLmdldFpvb21TY2FsZShpLHRoaXMuX3pvb20pLG49aHQodGhpcy5fY29udGFpbmVyKSxvPXRoaXMuX21hcC5nZXRTaXplKCkubXVsdGlwbHlCeSguNSt0aGlzLm9wdGlvbnMucGFkZGluZykscz10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9jZW50ZXIsaSkscj10aGlzLl9tYXAucHJvamVjdCh0LGkpLnN1YnRyYWN0KHMpLGE9by5tdWx0aXBseUJ5KC1lKS5hZGQobikuYWRkKG8pLnN1YnRyYWN0KHIpO2ppP3J0KHRoaXMuX2NvbnRhaW5lcixhLGUpOmF0KHRoaXMuX2NvbnRhaW5lcixhKX0sX3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlKCksdGhpcy5fdXBkYXRlVHJhbnNmb3JtKHRoaXMuX2NlbnRlcix0aGlzLl96b29tKTtmb3IodmFyIHQgaW4gdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1t0XS5fcmVzZXQoKX0sX29uWm9vbUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl9wcm9qZWN0KCl9LF91cGRhdGVQYXRoczpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl91cGRhdGUoKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5wYWRkaW5nLGk9dGhpcy5fbWFwLmdldFNpemUoKSxlPXRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChpLm11bHRpcGx5QnkoLXQpKS5yb3VuZCgpO3RoaXMuX2JvdW5kcz1uZXcgUChlLGUuYWRkKGkubXVsdGlwbHlCeSgxKzIqdCkpLnJvdW5kKCkpLHRoaXMuX2NlbnRlcj10aGlzLl9tYXAuZ2V0Q2VudGVyKCksdGhpcy5fem9vbT10aGlzLl9tYXAuZ2V0Wm9vbSgpfX0pLHZuPWduLmV4dGVuZCh7Z2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9Z24ucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybiB0LnZpZXdwcmVyZXNldD10aGlzLl9vblZpZXdQcmVSZXNldCx0fSxfb25WaWV3UHJlUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSEwfSxvbkFkZDpmdW5jdGlvbigpe2duLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMpLHRoaXMuX2RyYXcoKX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7bXQodCwibW91c2Vtb3ZlIixvKHRoaXMuX29uTW91c2VNb3ZlLDMyLHRoaXMpLHRoaXMpLG10KHQsImNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIGNvbnRleHRtZW51Iix0aGlzLl9vbkNsaWNrLHRoaXMpLG10KHQsIm1vdXNlb3V0Iix0aGlzLl9oYW5kbGVNb3VzZU91dCx0aGlzKSx0aGlzLl9jdHg9dC5nZXRDb250ZXh0KCIyZCIpfSxfZGVzdHJveUNvbnRhaW5lcjpmdW5jdGlvbigpe2codGhpcy5fcmVkcmF3UmVxdWVzdCksZGVsZXRlIHRoaXMuX2N0eCxLKHRoaXMuX2NvbnRhaW5lciksZnQodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyfSxfdXBkYXRlUGF0aHM6ZnVuY3Rpb24oKXtpZighdGhpcy5fcG9zdHBvbmVVcGRhdGVQYXRocyl7dGhpcy5fcmVkcmF3Qm91bmRzPW51bGw7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3VwZGF0ZSgpO3RoaXMuX3JlZHJhdygpfX0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb218fCF0aGlzLl9ib3VuZHMpe2duLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7dmFyIHQ9dGhpcy5fYm91bmRzLGk9dGhpcy5fY29udGFpbmVyLGU9dC5nZXRTaXplKCksbj1ZaT8yOjE7YXQoaSx0Lm1pbiksaS53aWR0aD1uKmUueCxpLmhlaWdodD1uKmUueSxpLnN0eWxlLndpZHRoPWUueCsicHgiLGkuc3R5bGUuaGVpZ2h0PWUueSsicHgiLFlpJiZ0aGlzLl9jdHguc2NhbGUoMiwyKSx0aGlzLl9jdHgudHJhbnNsYXRlKC10Lm1pbi54LC10Lm1pbi55KSx0aGlzLmZpcmUoInVwZGF0ZSIpfX0sX3Jlc2V0OmZ1bmN0aW9uKCl7Z24ucHJvdG90eXBlLl9yZXNldC5jYWxsKHRoaXMpLHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMmJih0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSExLHRoaXMuX3VwZGF0ZVBhdGhzKCkpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpLHRoaXMuX2xheWVyc1tuKHQpXT10O3ZhciBpPXQuX29yZGVyPXtsYXllcjp0LHByZXY6dGhpcy5fZHJhd0xhc3QsbmV4dDpudWxsfTt0aGlzLl9kcmF3TGFzdCYmKHRoaXMuX2RyYXdMYXN0Lm5leHQ9aSksdGhpcy5fZHJhd0xhc3Q9aSx0aGlzLl9kcmF3Rmlyc3Q9dGhpcy5fZHJhd0ZpcnN0fHx0aGlzLl9kcmF3TGFzdH0sX2FkZFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fb3JkZXIsZT1pLm5leHQsbz1pLnByZXY7ZT9lLnByZXY9bzp0aGlzLl9kcmF3TGFzdD1vLG8/by5uZXh0PWU6dGhpcy5fZHJhd0ZpcnN0PWUsZGVsZXRlIHQuX29yZGVyLGRlbGV0ZSB0aGlzLl9sYXllcnNbbih0KV0sdGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fZXh0ZW5kUmVkcmF3Qm91bmRzKHQpLHQuX3Byb2plY3QoKSx0Ll91cGRhdGUoKSx0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpLHRoaXMuX3JlcXVlc3RSZWRyYXcodCl9LF91cGRhdGVEYXNoQXJyYXk6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0Lm9wdGlvbnMuZGFzaEFycmF5KXt2YXIgaSxlLG49dC5vcHRpb25zLmRhc2hBcnJheS5zcGxpdCgvWywgXSsvKSxvPVtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe2lmKGk9TnVtYmVyKG5bZV0pLGlzTmFOKGkpKXJldHVybjtvLnB1c2goaSl9dC5vcHRpb25zLl9kYXNoQXJyYXk9b31lbHNlIHQub3B0aW9ucy5fZGFzaEFycmF5PXQub3B0aW9ucy5kYXNoQXJyYXl9LF9yZXF1ZXN0UmVkcmF3OmZ1bmN0aW9uKHQpe3RoaXMuX21hcCYmKHRoaXMuX2V4dGVuZFJlZHJhd0JvdW5kcyh0KSx0aGlzLl9yZWRyYXdSZXF1ZXN0PXRoaXMuX3JlZHJhd1JlcXVlc3R8fGYodGhpcy5fcmVkcmF3LHRoaXMpKX0sX2V4dGVuZFJlZHJhd0JvdW5kczpmdW5jdGlvbih0KXtpZih0Ll9weEJvdW5kcyl7dmFyIGk9KHQub3B0aW9ucy53ZWlnaHR8fDApKzE7dGhpcy5fcmVkcmF3Qm91bmRzPXRoaXMuX3JlZHJhd0JvdW5kc3x8bmV3IFAsdGhpcy5fcmVkcmF3Qm91bmRzLmV4dGVuZCh0Ll9weEJvdW5kcy5taW4uc3VidHJhY3QoW2ksaV0pKSx0aGlzLl9yZWRyYXdCb3VuZHMuZXh0ZW5kKHQuX3B4Qm91bmRzLm1heC5hZGQoW2ksaV0pKX19LF9yZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl9yZWRyYXdSZXF1ZXN0PW51bGwsdGhpcy5fcmVkcmF3Qm91bmRzJiYodGhpcy5fcmVkcmF3Qm91bmRzLm1pbi5fZmxvb3IoKSx0aGlzLl9yZWRyYXdCb3VuZHMubWF4Ll9jZWlsKCkpLHRoaXMuX2NsZWFyKCksdGhpcy5fZHJhdygpLHRoaXMuX3JlZHJhd0JvdW5kcz1udWxsfSxfY2xlYXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZWRyYXdCb3VuZHM7aWYodCl7dmFyIGk9dC5nZXRTaXplKCk7dGhpcy5fY3R4LmNsZWFyUmVjdCh0Lm1pbi54LHQubWluLnksaS54LGkueSl9ZWxzZSB0aGlzLl9jdHguY2xlYXJSZWN0KDAsMCx0aGlzLl9jb250YWluZXIud2lkdGgsdGhpcy5fY29udGFpbmVyLmhlaWdodCl9LF9kcmF3OmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLl9yZWRyYXdCb3VuZHM7aWYodGhpcy5fY3R4LnNhdmUoKSxpKXt2YXIgZT1pLmdldFNpemUoKTt0aGlzLl9jdHguYmVnaW5QYXRoKCksdGhpcy5fY3R4LnJlY3QoaS5taW4ueCxpLm1pbi55LGUueCxlLnkpLHRoaXMuX2N0eC5jbGlwKCl9dGhpcy5fZHJhd2luZz0hMDtmb3IodmFyIG49dGhpcy5fZHJhd0ZpcnN0O247bj1uLm5leHQpdD1uLmxheWVyLCghaXx8dC5fcHhCb3VuZHMmJnQuX3B4Qm91bmRzLmludGVyc2VjdHMoaSkpJiZ0Ll91cGRhdGVQYXRoKCk7dGhpcy5fZHJhd2luZz0hMSx0aGlzLl9jdHgucmVzdG9yZSgpfSxfdXBkYXRlUG9seTpmdW5jdGlvbih0LGkpe2lmKHRoaXMuX2RyYXdpbmcpe3ZhciBlLG4sbyxzLHI9dC5fcGFydHMsYT1yLmxlbmd0aCxoPXRoaXMuX2N0eDtpZihhKXtmb3IoaC5iZWdpblBhdGgoKSxlPTA7ZTxhO2UrKyl7Zm9yKG49MCxvPXJbZV0ubGVuZ3RoO248bztuKyspcz1yW2VdW25dLGhbbj8ibGluZVRvIjoibW92ZVRvIl0ocy54LHMueSk7aSYmaC5jbG9zZVBhdGgoKX10aGlzLl9maWxsU3Ryb2tlKGgsdCl9fX0sX3VwZGF0ZUNpcmNsZTpmdW5jdGlvbih0KXtpZih0aGlzLl9kcmF3aW5nJiYhdC5fZW1wdHkoKSl7dmFyIGk9dC5fcG9pbnQsZT10aGlzLl9jdHgsbj1NYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1cyksMSksbz0oTWF0aC5tYXgoTWF0aC5yb3VuZCh0Ll9yYWRpdXNZKSwxKXx8bikvbjsxIT09byYmKGUuc2F2ZSgpLGUuc2NhbGUoMSxvKSksZS5iZWdpblBhdGgoKSxlLmFyYyhpLngsaS55L28sbiwwLDIqTWF0aC5QSSwhMSksMSE9PW8mJmUucmVzdG9yZSgpLHRoaXMuX2ZpbGxTdHJva2UoZSx0KX19LF9maWxsU3Ryb2tlOmZ1bmN0aW9uKHQsaSl7dmFyIGU9aS5vcHRpb25zO2UuZmlsbCYmKHQuZ2xvYmFsQWxwaGE9ZS5maWxsT3BhY2l0eSx0LmZpbGxTdHlsZT1lLmZpbGxDb2xvcnx8ZS5jb2xvcix0LmZpbGwoZS5maWxsUnVsZXx8ImV2ZW5vZGQiKSksZS5zdHJva2UmJjAhPT1lLndlaWdodCYmKHQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goaS5vcHRpb25zJiZpLm9wdGlvbnMuX2Rhc2hBcnJheXx8W10pLHQuZ2xvYmFsQWxwaGE9ZS5vcGFjaXR5LHQubGluZVdpZHRoPWUud2VpZ2h0LHQuc3Ryb2tlU3R5bGU9ZS5jb2xvcix0LmxpbmVDYXA9ZS5saW5lQ2FwLHQubGluZUpvaW49ZS5saW5lSm9pbix0LnN0cm9rZSgpKX0sX29uQ2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLGUsbj10aGlzLl9tYXAubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSxvPXRoaXMuX2RyYXdGaXJzdDtvO289by5uZXh0KShpPW8ubGF5ZXIpLm9wdGlvbnMuaW50ZXJhY3RpdmUmJmkuX2NvbnRhaW5zUG9pbnQobikmJiF0aGlzLl9tYXAuX2RyYWdnYWJsZU1vdmVkKGkpJiYoZT1pKTtlJiYoenQodCksdGhpcy5fZmlyZUV2ZW50KFtlXSx0KSl9LF9vbk1vdXNlTW92ZTpmdW5jdGlvbih0KXtpZih0aGlzLl9tYXAmJiF0aGlzLl9tYXAuZHJhZ2dpbmcubW92aW5nKCkmJiF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20pe3ZhciBpPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpO3RoaXMuX2hhbmRsZU1vdXNlSG92ZXIodCxpKX19LF9oYW5kbGVNb3VzZU91dDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9ob3ZlcmVkTGF5ZXI7aSYmKHR0KHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1pbnRlcmFjdGl2ZSIpLHRoaXMuX2ZpcmVFdmVudChbaV0sdCwibW91c2VvdXQiKSx0aGlzLl9ob3ZlcmVkTGF5ZXI9bnVsbCl9LF9oYW5kbGVNb3VzZUhvdmVyOmZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBlLG4sbz10aGlzLl9kcmF3Rmlyc3Q7bztvPW8ubmV4dCkoZT1vLmxheWVyKS5vcHRpb25zLmludGVyYWN0aXZlJiZlLl9jb250YWluc1BvaW50KGkpJiYobj1lKTtuIT09dGhpcy5faG92ZXJlZExheWVyJiYodGhpcy5faGFuZGxlTW91c2VPdXQodCksbiYmKFEodGhpcy5fY29udGFpbmVyLCJsZWFmbGV0LWludGVyYWN0aXZlIiksdGhpcy5fZmlyZUV2ZW50KFtuXSx0LCJtb3VzZW92ZXIiKSx0aGlzLl9ob3ZlcmVkTGF5ZXI9bikpLHRoaXMuX2hvdmVyZWRMYXllciYmdGhpcy5fZmlyZUV2ZW50KFt0aGlzLl9ob3ZlcmVkTGF5ZXJdLHQpfSxfZmlyZUV2ZW50OmZ1bmN0aW9uKHQsaSxlKXt0aGlzLl9tYXAuX2ZpcmVET01FdmVudChpLGV8fGkudHlwZSx0KX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbih0KXt2YXIgaT10Ll9vcmRlcjtpZihpKXt2YXIgZT1pLm5leHQsbj1pLnByZXY7ZSYmKGUucHJldj1uLG4/bi5uZXh0PWU6ZSYmKHRoaXMuX2RyYXdGaXJzdD1lKSxpLnByZXY9dGhpcy5fZHJhd0xhc3QsdGhpcy5fZHJhd0xhc3QubmV4dD1pLGkubmV4dD1udWxsLHRoaXMuX2RyYXdMYXN0PWksdGhpcy5fcmVxdWVzdFJlZHJhdyh0KSl9fSxfYnJpbmdUb0JhY2s6ZnVuY3Rpb24odCl7dmFyIGk9dC5fb3JkZXI7aWYoaSl7dmFyIGU9aS5uZXh0LG49aS5wcmV2O24mJihuLm5leHQ9ZSxlP2UucHJldj1uOm4mJih0aGlzLl9kcmF3TGFzdD1uKSxpLnByZXY9bnVsbCxpLm5leHQ9dGhpcy5fZHJhd0ZpcnN0LHRoaXMuX2RyYXdGaXJzdC5wcmV2PWksdGhpcy5fZHJhd0ZpcnN0PWksdGhpcy5fcmVxdWVzdFJlZHJhdyh0KSl9fX0pLHluPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBkb2N1bWVudC5uYW1lc3BhY2VzLmFkZCgibHZtbCIsInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiksZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIjxsdm1sOiIrdCsnIGNsYXNzPSJsdm1sIj4nKX19Y2F0Y2godCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCI8Iit0KycgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC5jb206dm1sIiBjbGFzcz0ibHZtbCI+Jyl9fX0oKSx4bj17X2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXI9RygiZGl2IiwibGVhZmxldC12bWwtY29udGFpbmVyIil9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb218fChnbi5wcm90b3R5cGUuX3VwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuZmlyZSgidXBkYXRlIikpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fY29udGFpbmVyPXluKCJzaGFwZSIpO1EoaSwibGVhZmxldC12bWwtc2hhcGUgIisodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8IiIpKSxpLmNvb3Jkc2l6ZT0iMSAxIix0Ll9wYXRoPXluKCJwYXRoIiksaS5hcHBlbmRDaGlsZCh0Ll9wYXRoKSx0aGlzLl91cGRhdGVTdHlsZSh0KSx0aGlzLl9sYXllcnNbbih0KV09dH0sX2FkZFBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fY29udGFpbmVyO3RoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChpKSx0Lm9wdGlvbnMuaW50ZXJhY3RpdmUmJnQuYWRkSW50ZXJhY3RpdmVUYXJnZXQoaSl9LF9yZW1vdmVQYXRoOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX2NvbnRhaW5lcjtLKGkpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQoaSksZGVsZXRlIHRoaXMuX2xheWVyc1tuKHQpXX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3N0cm9rZSxlPXQuX2ZpbGwsbj10Lm9wdGlvbnMsbz10Ll9jb250YWluZXI7by5zdHJva2VkPSEhbi5zdHJva2Usby5maWxsZWQ9ISFuLmZpbGwsbi5zdHJva2U/KGl8fChpPXQuX3N0cm9rZT15bigic3Ryb2tlIikpLG8uYXBwZW5kQ2hpbGQoaSksaS53ZWlnaHQ9bi53ZWlnaHQrInB4IixpLmNvbG9yPW4uY29sb3IsaS5vcGFjaXR5PW4ub3BhY2l0eSxuLmRhc2hBcnJheT9pLmRhc2hTdHlsZT1vaShuLmRhc2hBcnJheSk/bi5kYXNoQXJyYXkuam9pbigiICIpOm4uZGFzaEFycmF5LnJlcGxhY2UoLyggKiwgKikvZywiICIpOmkuZGFzaFN0eWxlPSIiLGkuZW5kY2FwPW4ubGluZUNhcC5yZXBsYWNlKCJidXR0IiwiZmxhdCIpLGkuam9pbnN0eWxlPW4ubGluZUpvaW4pOmkmJihvLnJlbW92ZUNoaWxkKGkpLHQuX3N0cm9rZT1udWxsKSxuLmZpbGw/KGV8fChlPXQuX2ZpbGw9eW4oImZpbGwiKSksby5hcHBlbmRDaGlsZChlKSxlLmNvbG9yPW4uZmlsbENvbG9yfHxuLmNvbG9yLGUub3BhY2l0eT1uLmZpbGxPcGFjaXR5KTplJiYoby5yZW1vdmVDaGlsZChlKSx0Ll9maWxsPW51bGwpfSxfdXBkYXRlQ2lyY2xlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3BvaW50LnJvdW5kKCksZT1NYXRoLnJvdW5kKHQuX3JhZGl1cyksbj1NYXRoLnJvdW5kKHQuX3JhZGl1c1l8fGUpO3RoaXMuX3NldFBhdGgodCx0Ll9lbXB0eSgpPyJNMCAwIjoiQUwgIitpLngrIiwiK2kueSsiICIrZSsiLCIrbisiIDAsMjM1OTI2MDAiKX0sX3NldFBhdGg6ZnVuY3Rpb24odCxpKXt0Ll9wYXRoLnY9aX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbih0KXtYKHQuX2NvbnRhaW5lcil9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXtKKHQuX2NvbnRhaW5lcil9fSx3bj0kaT95bjpFLFBuPWduLmV4dGVuZCh7Z2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9Z24ucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybiB0Lnpvb21zdGFydD10aGlzLl9vblpvb21TdGFydCx0fSxfaW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcj13bigic3ZnIiksdGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksdGhpcy5fcm9vdEdyb3VwPXduKCJnIiksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3RHcm91cCl9LF9kZXN0cm95Q29udGFpbmVyOmZ1bmN0aW9uKCl7Syh0aGlzLl9jb250YWluZXIpLGZ0KHRoaXMuX2NvbnRhaW5lciksZGVsZXRlIHRoaXMuX2NvbnRhaW5lcixkZWxldGUgdGhpcy5fcm9vdEdyb3VwLGRlbGV0ZSB0aGlzLl9zdmdTaXplfSxfb25ab29tU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGUoKX0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb218fCF0aGlzLl9ib3VuZHMpe2duLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7dmFyIHQ9dGhpcy5fYm91bmRzLGk9dC5nZXRTaXplKCksZT10aGlzLl9jb250YWluZXI7dGhpcy5fc3ZnU2l6ZSYmdGhpcy5fc3ZnU2l6ZS5lcXVhbHMoaSl8fCh0aGlzLl9zdmdTaXplPWksZS5zZXRBdHRyaWJ1dGUoIndpZHRoIixpLngpLGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGkueSkpLGF0KGUsdC5taW4pLGUuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixbdC5taW4ueCx0Lm1pbi55LGkueCxpLnldLmpvaW4oIiAiKSksdGhpcy5maXJlKCJ1cGRhdGUiKX19LF9pbml0UGF0aDpmdW5jdGlvbih0KXt2YXIgaT10Ll9wYXRoPXduKCJwYXRoIik7dC5vcHRpb25zLmNsYXNzTmFtZSYmUShpLHQub3B0aW9ucy5jbGFzc05hbWUpLHQub3B0aW9ucy5pbnRlcmFjdGl2ZSYmUShpLCJsZWFmbGV0LWludGVyYWN0aXZlIiksdGhpcy5fdXBkYXRlU3R5bGUodCksdGhpcy5fbGF5ZXJzW24odCldPXR9LF9hZGRQYXRoOmZ1bmN0aW9uKHQpe3RoaXMuX3Jvb3RHcm91cHx8dGhpcy5faW5pdENvbnRhaW5lcigpLHRoaXMuX3Jvb3RHcm91cC5hcHBlbmRDaGlsZCh0Ll9wYXRoKSx0LmFkZEludGVyYWN0aXZlVGFyZ2V0KHQuX3BhdGgpfSxfcmVtb3ZlUGF0aDpmdW5jdGlvbih0KXtLKHQuX3BhdGgpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodC5fcGF0aCksZGVsZXRlIHRoaXMuX2xheWVyc1tuKHQpXX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dC5fcHJvamVjdCgpLHQuX3VwZGF0ZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dmFyIGk9dC5fcGF0aCxlPXQub3B0aW9ucztpJiYoZS5zdHJva2U/KGkuc2V0QXR0cmlidXRlKCJzdHJva2UiLGUuY29sb3IpLGkuc2V0QXR0cmlidXRlKCJzdHJva2Utb3BhY2l0eSIsZS5vcGFjaXR5KSxpLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIixlLndlaWdodCksaS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1saW5lY2FwIixlLmxpbmVDYXApLGkuc2V0QXR0cmlidXRlKCJzdHJva2UtbGluZWpvaW4iLGUubGluZUpvaW4pLGUuZGFzaEFycmF5P2kuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5IixlLmRhc2hBcnJheSk6aS5yZW1vdmVBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiKSxlLmRhc2hPZmZzZXQ/aS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNob2Zmc2V0IixlLmRhc2hPZmZzZXQpOmkucmVtb3ZlQXR0cmlidXRlKCJzdHJva2UtZGFzaG9mZnNldCIpKTppLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwibm9uZSIpLGUuZmlsbD8oaS5zZXRBdHRyaWJ1dGUoImZpbGwiLGUuZmlsbENvbG9yfHxlLmNvbG9yKSxpLnNldEF0dHJpYnV0ZSgiZmlsbC1vcGFjaXR5IixlLmZpbGxPcGFjaXR5KSxpLnNldEF0dHJpYnV0ZSgiZmlsbC1ydWxlIixlLmZpbGxSdWxlfHwiZXZlbm9kZCIpKTppLnNldEF0dHJpYnV0ZSgiZmlsbCIsIm5vbmUiKSl9LF91cGRhdGVQb2x5OmZ1bmN0aW9uKHQsaSl7dGhpcy5fc2V0UGF0aCh0LGsodC5fcGFydHMsaSkpfSxfdXBkYXRlQ2lyY2xlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3BvaW50LGU9TWF0aC5tYXgoTWF0aC5yb3VuZCh0Ll9yYWRpdXMpLDEpLG49ImEiK2UrIiwiKyhNYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1c1kpLDEpfHxlKSsiIDAgMSwwICIsbz10Ll9lbXB0eSgpPyJNMCAwIjoiTSIrKGkueC1lKSsiLCIraS55K24rMiplKyIsMCAiK24rMiotZSsiLDAgIjt0aGlzLl9zZXRQYXRoKHQsbyl9LF9zZXRQYXRoOmZ1bmN0aW9uKHQsaSl7dC5fcGF0aC5zZXRBdHRyaWJ1dGUoImQiLGkpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKHQpe1godC5fcGF0aCl9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXtKKHQuX3BhdGgpfX0pOyRpJiZQbi5pbmNsdWRlKHhuKSxiZS5pbmNsdWRlKHtnZXRSZW5kZXJlcjpmdW5jdGlvbih0KXt2YXIgaT10Lm9wdGlvbnMucmVuZGVyZXJ8fHRoaXMuX2dldFBhbmVSZW5kZXJlcih0Lm9wdGlvbnMucGFuZSl8fHRoaXMub3B0aW9ucy5yZW5kZXJlcnx8dGhpcy5fcmVuZGVyZXI7cmV0dXJuIGl8fChpPXRoaXMuX3JlbmRlcmVyPXRoaXMuX2NyZWF0ZVJlbmRlcmVyKCkpLHRoaXMuaGFzTGF5ZXIoaSl8fHRoaXMuYWRkTGF5ZXIoaSksaX0sX2dldFBhbmVSZW5kZXJlcjpmdW5jdGlvbih0KXtpZigib3ZlcmxheVBhbmUiPT09dHx8dm9pZCAwPT09dClyZXR1cm4hMTt2YXIgaT10aGlzLl9wYW5lUmVuZGVyZXJzW3RdO3JldHVybiB2b2lkIDA9PT1pJiYoaT10aGlzLl9jcmVhdGVSZW5kZXJlcih7cGFuZTp0fSksdGhpcy5fcGFuZVJlbmRlcmVyc1t0XT1pKSxpfSxfY3JlYXRlUmVuZGVyZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wcmVmZXJDYW52YXMmJiR0KHQpfHxRdCh0KX19KTt2YXIgTG49b24uZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7b24ucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSxpKX0sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNldExhdExuZ3ModGhpcy5fYm91bmRzVG9MYXRMbmdzKHQpKX0sX2JvdW5kc1RvTGF0TG5nczpmdW5jdGlvbih0KXtyZXR1cm4gdD16KHQpLFt0LmdldFNvdXRoV2VzdCgpLHQuZ2V0Tm9ydGhXZXN0KCksdC5nZXROb3J0aEVhc3QoKSx0LmdldFNvdXRoRWFzdCgpXX19KTtQbi5jcmVhdGU9d24sUG4ucG9pbnRzVG9QYXRoPWssc24uZ2VvbWV0cnlUb0xheWVyPUZ0LHNuLmNvb3Jkc1RvTGF0TG5nPVV0LHNuLmNvb3Jkc1RvTGF0TG5ncz1WdCxzbi5sYXRMbmdUb0Nvb3Jkcz1xdCxzbi5sYXRMbmdzVG9Db29yZHM9R3Qsc24uZ2V0RmVhdHVyZT1LdCxzbi5hc0ZlYXR1cmU9WXQsYmUubWVyZ2VPcHRpb25zKHtib3hab29tOiEwfSk7dmFyIGJuPUVlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9dC5fY29udGFpbmVyLHRoaXMuX3BhbmU9dC5fcGFuZXMub3ZlcmxheVBhbmUsdGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQ9MCx0Lm9uKCJ1bmxvYWQiLHRoaXMuX2Rlc3Ryb3ksdGhpcyl9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7bXQodGhpcy5fY29udGFpbmVyLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe2Z0KHRoaXMuX2NvbnRhaW5lciwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0sbW92ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW92ZWR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7Syh0aGlzLl9wYW5lKSxkZWxldGUgdGhpcy5fcGFuZX0sX3Jlc2V0U3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFN0YXRlVGltZW91dD0wLHRoaXMuX21vdmVkPSExfSxfY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGU6ZnVuY3Rpb24oKXswIT09dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQpLHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0PTApfSxfb25Nb3VzZURvd246ZnVuY3Rpb24odCl7aWYoIXQuc2hpZnRLZXl8fDEhPT10LndoaWNoJiYxIT09dC5idXR0b24pcmV0dXJuITE7dGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKSx0aGlzLl9yZXNldFN0YXRlKCksZmkoKSx1dCgpLHRoaXMuX3N0YXJ0UG9pbnQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLG10KGRvY3VtZW50LHtjb250ZXh0bWVudTpMdCxtb3VzZW1vdmU6dGhpcy5fb25Nb3VzZU1vdmUsbW91c2V1cDp0aGlzLl9vbk1vdXNlVXAsa2V5ZG93bjp0aGlzLl9vbktleURvd259LHRoaXMpfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dGhpcy5fbW92ZWR8fCh0aGlzLl9tb3ZlZD0hMCx0aGlzLl9ib3g9RygiZGl2IiwibGVhZmxldC16b29tLWJveCIsdGhpcy5fY29udGFpbmVyKSxRKHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1jcm9zc2hhaXIiKSx0aGlzLl9tYXAuZmlyZSgiYm94em9vbXN0YXJ0IikpLHRoaXMuX3BvaW50PXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KTt2YXIgaT1uZXcgUCh0aGlzLl9wb2ludCx0aGlzLl9zdGFydFBvaW50KSxlPWkuZ2V0U2l6ZSgpO2F0KHRoaXMuX2JveCxpLm1pbiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWUueCsicHgiLHRoaXMuX2JveC5zdHlsZS5oZWlnaHQ9ZS55KyJweCJ9LF9maW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlZCYmKEsodGhpcy5fYm94KSx0dCh0aGlzLl9jb250YWluZXIsImxlYWZsZXQtY3Jvc3NoYWlyIikpLGdpKCksbHQoKSxmdChkb2N1bWVudCx7Y29udGV4dG1lbnU6THQsbW91c2Vtb3ZlOnRoaXMuX29uTW91c2VNb3ZlLG1vdXNldXA6dGhpcy5fb25Nb3VzZVVwLGtleWRvd246dGhpcy5fb25LZXlEb3dufSx0aGlzKX0sX29uTW91c2VVcDpmdW5jdGlvbih0KXtpZigoMT09PXQud2hpY2h8fDE9PT10LmJ1dHRvbikmJih0aGlzLl9maW5pc2goKSx0aGlzLl9tb3ZlZCkpe3RoaXMuX2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlKCksdGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQ9c2V0VGltZW91dChlKHRoaXMuX3Jlc2V0U3RhdGUsdGhpcyksMCk7dmFyIGk9bmV3IFQodGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcodGhpcy5fc3RhcnRQb2ludCksdGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcodGhpcy5fcG9pbnQpKTt0aGlzLl9tYXAuZml0Qm91bmRzKGkpLmZpcmUoImJveHpvb21lbmQiLHtib3hab29tQm91bmRzOml9KX19LF9vbktleURvd246ZnVuY3Rpb24odCl7Mjc9PT10LmtleUNvZGUmJnRoaXMuX2ZpbmlzaCgpfX0pO2JlLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwiYm94Wm9vbSIsYm4pLGJlLm1lcmdlT3B0aW9ucyh7ZG91YmxlQ2xpY2tab29tOiEwfSk7dmFyIFRuPUVlLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXt0aGlzLl9tYXAub24oImRibGNsaWNrIix0aGlzLl9vbkRvdWJsZUNsaWNrLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoImRibGNsaWNrIix0aGlzLl9vbkRvdWJsZUNsaWNrLHRoaXMpfSxfb25Eb3VibGVDbGljazpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXAsZT1pLmdldFpvb20oKSxuPWkub3B0aW9ucy56b29tRGVsdGEsbz10Lm9yaWdpbmFsRXZlbnQuc2hpZnRLZXk/ZS1uOmUrbjsiY2VudGVyIj09PWkub3B0aW9ucy5kb3VibGVDbGlja1pvb20/aS5zZXRab29tKG8pOmkuc2V0Wm9vbUFyb3VuZCh0LmNvbnRhaW5lclBvaW50LG8pfX0pO2JlLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwiZG91YmxlQ2xpY2tab29tIixUbiksYmUubWVyZ2VPcHRpb25zKHtkcmFnZ2luZzohMCxpbmVydGlhOiFNaSxpbmVydGlhRGVjZWxlcmF0aW9uOjM0MDAsaW5lcnRpYU1heFNwZWVkOjEvMCxlYXNlTGluZWFyaXR5Oi4yLHdvcmxkQ29weUp1bXA6ITEsbWF4Qm91bmRzVmlzY29zaXR5OjB9KTt2YXIgem49RWUuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe2lmKCF0aGlzLl9kcmFnZ2FibGUpe3ZhciB0PXRoaXMuX21hcDt0aGlzLl9kcmFnZ2FibGU9bmV3IFJlKHQuX21hcFBhbmUsdC5fY29udGFpbmVyKSx0aGlzLl9kcmFnZ2FibGUub24oe2RyYWdzdGFydDp0aGlzLl9vbkRyYWdTdGFydCxkcmFnOnRoaXMuX29uRHJhZyxkcmFnZW5kOnRoaXMuX29uRHJhZ0VuZH0sdGhpcyksdGhpcy5fZHJhZ2dhYmxlLm9uKCJwcmVkcmFnIix0aGlzLl9vblByZURyYWdMaW1pdCx0aGlzKSx0Lm9wdGlvbnMud29ybGRDb3B5SnVtcCYmKHRoaXMuX2RyYWdnYWJsZS5vbigicHJlZHJhZyIsdGhpcy5fb25QcmVEcmFnV3JhcCx0aGlzKSx0Lm9uKCJ6b29tZW5kIix0aGlzLl9vblpvb21FbmQsdGhpcyksdC53aGVuUmVhZHkodGhpcy5fb25ab29tRW5kLHRoaXMpKX1RKHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LWdyYWIgbGVhZmxldC10b3VjaC1kcmFnIiksdGhpcy5fZHJhZ2dhYmxlLmVuYWJsZSgpLHRoaXMuX3Bvc2l0aW9ucz1bXSx0aGlzLl90aW1lcz1bXX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXt0dCh0aGlzLl9tYXAuX2NvbnRhaW5lciwibGVhZmxldC1ncmFiIiksdHQodGhpcy5fbWFwLl9jb250YWluZXIsImxlYWZsZXQtdG91Y2gtZHJhZyIpLHRoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sbW92aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3Zpbmd9LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcDtpZih0Ll9zdG9wKCksdGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzJiZ0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHNWaXNjb3NpdHkpe3ZhciBpPXoodGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzKTt0aGlzLl9vZmZzZXRMaW1pdD1iKHRoaXMuX21hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0Tm9ydGhXZXN0KCkpLm11bHRpcGx5QnkoLTEpLHRoaXMuX21hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0U291dGhFYXN0KCkpLm11bHRpcGx5QnkoLTEpLmFkZCh0aGlzLl9tYXAuZ2V0U2l6ZSgpKSksdGhpcy5fdmlzY29zaXR5PU1hdGgubWluKDEsTWF0aC5tYXgoMCx0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHNWaXNjb3NpdHkpKX1lbHNlIHRoaXMuX29mZnNldExpbWl0PW51bGw7dC5maXJlKCJtb3Zlc3RhcnQiKS5maXJlKCJkcmFnc3RhcnQiKSx0Lm9wdGlvbnMuaW5lcnRpYSYmKHRoaXMuX3Bvc2l0aW9ucz1bXSx0aGlzLl90aW1lcz1bXSl9LF9vbkRyYWc6ZnVuY3Rpb24odCl7aWYodGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSl7dmFyIGk9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGU9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX2Fic1Bvc3x8dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3M7dGhpcy5fcG9zaXRpb25zLnB1c2goZSksdGhpcy5fdGltZXMucHVzaChpKSx0aGlzLl9wcnVuZVBvc2l0aW9ucyhpKX10aGlzLl9tYXAuZmlyZSgibW92ZSIsdCkuZmlyZSgiZHJhZyIsdCl9LF9wcnVuZVBvc2l0aW9uczpmdW5jdGlvbih0KXtmb3IoO3RoaXMuX3Bvc2l0aW9ucy5sZW5ndGg+MSYmdC10aGlzLl90aW1lc1swXT41MDspdGhpcy5fcG9zaXRpb25zLnNoaWZ0KCksdGhpcy5fdGltZXMuc2hpZnQoKX0sX29uWm9vbUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkuZGl2aWRlQnkoMiksaT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KFswLDBdKTt0aGlzLl9pbml0aWFsV29ybGRPZmZzZXQ9aS5zdWJ0cmFjdCh0KS54LHRoaXMuX3dvcmxkV2lkdGg9dGhpcy5fbWFwLmdldFBpeGVsV29ybGRCb3VuZHMoKS5nZXRTaXplKCkueH0sX3Zpc2NvdXNMaW1pdDpmdW5jdGlvbih0LGkpe3JldHVybiB0LSh0LWkpKnRoaXMuX3Zpc2Nvc2l0eX0sX29uUHJlRHJhZ0xpbWl0OmZ1bmN0aW9uKCl7aWYodGhpcy5fdmlzY29zaXR5JiZ0aGlzLl9vZmZzZXRMaW1pdCl7dmFyIHQ9dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3Muc3VidHJhY3QodGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcyksaT10aGlzLl9vZmZzZXRMaW1pdDt0Lng8aS5taW4ueCYmKHQueD10aGlzLl92aXNjb3VzTGltaXQodC54LGkubWluLngpKSx0Lnk8aS5taW4ueSYmKHQueT10aGlzLl92aXNjb3VzTGltaXQodC55LGkubWluLnkpKSx0Lng+aS5tYXgueCYmKHQueD10aGlzLl92aXNjb3VzTGltaXQodC54LGkubWF4LngpKSx0Lnk+aS5tYXgueSYmKHQueT10aGlzLl92aXNjb3VzTGltaXQodC55LGkubWF4LnkpKSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcz10aGlzLl9kcmFnZ2FibGUuX3N0YXJ0UG9zLmFkZCh0KX19LF9vblByZURyYWdXcmFwOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fd29ybGRXaWR0aCxpPU1hdGgucm91bmQodC8yKSxlPXRoaXMuX2luaXRpYWxXb3JsZE9mZnNldCxuPXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLngsbz0obi1pK2UpJXQraS1lLHM9KG4raStlKSV0LWktZSxyPU1hdGguYWJzKG8rZSk8TWF0aC5hYnMocytlKT9vOnM7dGhpcy5fZHJhZ2dhYmxlLl9hYnNQb3M9dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MuY2xvbmUoKSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54PXJ9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9aS5vcHRpb25zLG49IWUuaW5lcnRpYXx8dGhpcy5fdGltZXMubGVuZ3RoPDI7aWYoaS5maXJlKCJkcmFnZW5kIix0KSxuKWkuZmlyZSgibW92ZWVuZCIpO2Vsc2V7dGhpcy5fcHJ1bmVQb3NpdGlvbnMoK25ldyBEYXRlKTt2YXIgbz10aGlzLl9sYXN0UG9zLnN1YnRyYWN0KHRoaXMuX3Bvc2l0aW9uc1swXSkscz0odGhpcy5fbGFzdFRpbWUtdGhpcy5fdGltZXNbMF0pLzFlMyxyPWUuZWFzZUxpbmVhcml0eSxhPW8ubXVsdGlwbHlCeShyL3MpLGg9YS5kaXN0YW5jZVRvKFswLDBdKSx1PU1hdGgubWluKGUuaW5lcnRpYU1heFNwZWVkLGgpLGw9YS5tdWx0aXBseUJ5KHUvaCksYz11LyhlLmluZXJ0aWFEZWNlbGVyYXRpb24qciksXz1sLm11bHRpcGx5QnkoLWMvMikucm91bmQoKTtfLnh8fF8ueT8oXz1pLl9saW1pdE9mZnNldChfLGkub3B0aW9ucy5tYXhCb3VuZHMpLGYoZnVuY3Rpb24oKXtpLnBhbkJ5KF8se2R1cmF0aW9uOmMsZWFzZUxpbmVhcml0eTpyLG5vTW92ZVN0YXJ0OiEwLGFuaW1hdGU6ITB9KX0pKTppLmZpcmUoIm1vdmVlbmQiKX19fSk7YmUuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJkcmFnZ2luZyIsem4pLGJlLm1lcmdlT3B0aW9ucyh7a2V5Ym9hcmQ6ITAsa2V5Ym9hcmRQYW5EZWx0YTo4MH0pO3ZhciBNbj1FZS5leHRlbmQoe2tleUNvZGVzOntsZWZ0OlszN10scmlnaHQ6WzM5XSxkb3duOls0MF0sdXA6WzM4XSx6b29tSW46WzE4NywxMDcsNjEsMTcxXSx6b29tT3V0OlsxODksMTA5LDU0LDE3M119LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fc2V0UGFuRGVsdGEodC5vcHRpb25zLmtleWJvYXJkUGFuRGVsdGEpLHRoaXMuX3NldFpvb21EZWx0YSh0Lm9wdGlvbnMuem9vbURlbHRhKX0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lcjt0LnRhYkluZGV4PD0wJiYodC50YWJJbmRleD0iMCIpLG10KHQse2ZvY3VzOnRoaXMuX29uRm9jdXMsYmx1cjp0aGlzLl9vbkJsdXIsbW91c2Vkb3duOnRoaXMuX29uTW91c2VEb3dufSx0aGlzKSx0aGlzLl9tYXAub24oe2ZvY3VzOnRoaXMuX2FkZEhvb2tzLGJsdXI6dGhpcy5fcmVtb3ZlSG9va3N9LHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUhvb2tzKCksZnQodGhpcy5fbWFwLl9jb250YWluZXIse2ZvY3VzOnRoaXMuX29uRm9jdXMsYmx1cjp0aGlzLl9vbkJsdXIsbW91c2Vkb3duOnRoaXMuX29uTW91c2VEb3dufSx0aGlzKSx0aGlzLl9tYXAub2ZmKHtmb2N1czp0aGlzLl9hZGRIb29rcyxibHVyOnRoaXMuX3JlbW92ZUhvb2tzfSx0aGlzKX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZvY3VzZWQpe3ZhciB0PWRvY3VtZW50LmJvZHksaT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10LnNjcm9sbFRvcHx8aS5zY3JvbGxUb3Asbj10LnNjcm9sbExlZnR8fGkuc2Nyb2xsTGVmdDt0aGlzLl9tYXAuX2NvbnRhaW5lci5mb2N1cygpLHdpbmRvdy5zY3JvbGxUbyhuLGUpfX0sX29uRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkPSEwLHRoaXMuX21hcC5maXJlKCJmb2N1cyIpfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMSx0aGlzLl9tYXAuZmlyZSgiYmx1ciIpfSxfc2V0UGFuRGVsdGE6ZnVuY3Rpb24odCl7dmFyIGksZSxuPXRoaXMuX3BhbktleXM9e30sbz10aGlzLmtleUNvZGVzO2ZvcihpPTAsZT1vLmxlZnQubGVuZ3RoO2k8ZTtpKyspbltvLmxlZnRbaV1dPVstMSp0LDBdO2ZvcihpPTAsZT1vLnJpZ2h0Lmxlbmd0aDtpPGU7aSsrKW5bby5yaWdodFtpXV09W3QsMF07Zm9yKGk9MCxlPW8uZG93bi5sZW5ndGg7aTxlO2krKyluW28uZG93bltpXV09WzAsdF07Zm9yKGk9MCxlPW8udXAubGVuZ3RoO2k8ZTtpKyspbltvLnVwW2ldXT1bMCwtMSp0XX0sX3NldFpvb21EZWx0YTpmdW5jdGlvbih0KXt2YXIgaSxlLG49dGhpcy5fem9vbUtleXM9e30sbz10aGlzLmtleUNvZGVzO2ZvcihpPTAsZT1vLnpvb21Jbi5sZW5ndGg7aTxlO2krKyluW28uem9vbUluW2ldXT10O2ZvcihpPTAsZT1vLnpvb21PdXQubGVuZ3RoO2k8ZTtpKyspbltvLnpvb21PdXRbaV1dPS10fSxfYWRkSG9va3M6ZnVuY3Rpb24oKXttdChkb2N1bWVudCwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLHRoaXMpfSxfcmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtmdChkb2N1bWVudCwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLHRoaXMpfSxfb25LZXlEb3duOmZ1bmN0aW9uKHQpe2lmKCEodC5hbHRLZXl8fHQuY3RybEtleXx8dC5tZXRhS2V5KSl7dmFyIGksZT10LmtleUNvZGUsbj10aGlzLl9tYXA7aWYoZSBpbiB0aGlzLl9wYW5LZXlzKW4uX3BhbkFuaW0mJm4uX3BhbkFuaW0uX2luUHJvZ3Jlc3N8fChpPXRoaXMuX3BhbktleXNbZV0sdC5zaGlmdEtleSYmKGk9dyhpKS5tdWx0aXBseUJ5KDMpKSxuLnBhbkJ5KGkpLG4ub3B0aW9ucy5tYXhCb3VuZHMmJm4ucGFuSW5zaWRlQm91bmRzKG4ub3B0aW9ucy5tYXhCb3VuZHMpKTtlbHNlIGlmKGUgaW4gdGhpcy5fem9vbUtleXMpbi5zZXRab29tKG4uZ2V0Wm9vbSgpKyh0LnNoaWZ0S2V5PzM6MSkqdGhpcy5fem9vbUtleXNbZV0pO2Vsc2V7aWYoMjchPT1lfHwhbi5fcG9wdXB8fCFuLl9wb3B1cC5vcHRpb25zLmNsb3NlT25Fc2NhcGVLZXkpcmV0dXJuO24uY2xvc2VQb3B1cCgpfUx0KHQpfX19KTtiZS5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImtleWJvYXJkIixNbiksYmUubWVyZ2VPcHRpb25zKHtzY3JvbGxXaGVlbFpvb206ITAsd2hlZWxEZWJvdW5jZVRpbWU6NDAsd2hlZWxQeFBlclpvb21MZXZlbDo2MH0pO3ZhciBDbj1FZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7bXQodGhpcy5fbWFwLl9jb250YWluZXIsIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWxTY3JvbGwsdGhpcyksdGhpcy5fZGVsdGE9MH0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtmdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwibW91c2V3aGVlbCIsdGhpcy5fb25XaGVlbFNjcm9sbCx0aGlzKX0sX29uV2hlZWxTY3JvbGw6ZnVuY3Rpb24odCl7dmFyIGk9VHQodCksbj10aGlzLl9tYXAub3B0aW9ucy53aGVlbERlYm91bmNlVGltZTt0aGlzLl9kZWx0YSs9aSx0aGlzLl9sYXN0TW91c2VQb3M9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLHRoaXMuX3N0YXJ0VGltZXx8KHRoaXMuX3N0YXJ0VGltZT0rbmV3IERhdGUpO3ZhciBvPU1hdGgubWF4KG4tKCtuZXcgRGF0ZS10aGlzLl9zdGFydFRpbWUpLDApO2NsZWFyVGltZW91dCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9c2V0VGltZW91dChlKHRoaXMuX3BlcmZvcm1ab29tLHRoaXMpLG8pLEx0KHQpfSxfcGVyZm9ybVpvb206ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsaT10LmdldFpvb20oKSxlPXRoaXMuX21hcC5vcHRpb25zLnpvb21TbmFwfHwwO3QuX3N0b3AoKTt2YXIgbj10aGlzLl9kZWx0YS8oNCp0aGlzLl9tYXAub3B0aW9ucy53aGVlbFB4UGVyWm9vbUxldmVsKSxvPTQqTWF0aC5sb2coMi8oMStNYXRoLmV4cCgtTWF0aC5hYnMobikpKSkvTWF0aC5MTjIscz1lP01hdGguY2VpbChvL2UpKmU6byxyPXQuX2xpbWl0Wm9vbShpKyh0aGlzLl9kZWx0YT4wP3M6LXMpKS1pO3RoaXMuX2RlbHRhPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsciYmKCJjZW50ZXIiPT09dC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbT90LnNldFpvb20oaStyKTp0LnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLGkrcikpfX0pO2JlLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwic2Nyb2xsV2hlZWxab29tIixDbiksYmUubWVyZ2VPcHRpb25zKHt0YXA6ITAsdGFwVG9sZXJhbmNlOjE1fSk7dmFyIFNuPUVlLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXttdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Eb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe2Z0KHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24sdGhpcyl9LF9vbkRvd246ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzKXtpZihQdCh0KSx0aGlzLl9maXJlQ2xpY2s9ITAsdC50b3VjaGVzLmxlbmd0aD4xKXJldHVybiB0aGlzLl9maXJlQ2xpY2s9ITEsdm9pZCBjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpO3ZhciBpPXQudG91Y2hlc1swXSxuPWkudGFyZ2V0O3RoaXMuX3N0YXJ0UG9zPXRoaXMuX25ld1Bvcz1uZXcgeChpLmNsaWVudFgsaS5jbGllbnRZKSxuLnRhZ05hbWUmJiJhIj09PW4udGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZRKG4sImxlYWZsZXQtYWN0aXZlIiksdGhpcy5faG9sZFRpbWVvdXQ9c2V0VGltZW91dChlKGZ1bmN0aW9uKCl7dGhpcy5faXNUYXBWYWxpZCgpJiYodGhpcy5fZmlyZUNsaWNrPSExLHRoaXMuX29uVXAoKSx0aGlzLl9zaW11bGF0ZUV2ZW50KCJjb250ZXh0bWVudSIsaSkpfSx0aGlzKSwxZTMpLHRoaXMuX3NpbXVsYXRlRXZlbnQoIm1vdXNlZG93biIsaSksbXQoZG9jdW1lbnQse3RvdWNobW92ZTp0aGlzLl9vbk1vdmUsdG91Y2hlbmQ6dGhpcy5fb25VcH0sdGhpcyl9fSxfb25VcDpmdW5jdGlvbih0KXtpZihjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpLGZ0KGRvY3VtZW50LHt0b3VjaG1vdmU6dGhpcy5fb25Nb3ZlLHRvdWNoZW5kOnRoaXMuX29uVXB9LHRoaXMpLHRoaXMuX2ZpcmVDbGljayYmdCYmdC5jaGFuZ2VkVG91Y2hlcyl7dmFyIGk9dC5jaGFuZ2VkVG91Y2hlc1swXSxlPWkudGFyZ2V0O2UmJmUudGFnTmFtZSYmImEiPT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJnR0KGUsImxlYWZsZXQtYWN0aXZlIiksdGhpcy5fc2ltdWxhdGVFdmVudCgibW91c2V1cCIsaSksdGhpcy5faXNUYXBWYWxpZCgpJiZ0aGlzLl9zaW11bGF0ZUV2ZW50KCJjbGljayIsaSl9fSxfaXNUYXBWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZXdQb3MuZGlzdGFuY2VUbyh0aGlzLl9zdGFydFBvcyk8PXRoaXMuX21hcC5vcHRpb25zLnRhcFRvbGVyYW5jZX0sX29uTW92ZTpmdW5jdGlvbih0KXt2YXIgaT10LnRvdWNoZXNbMF07dGhpcy5fbmV3UG9zPW5ldyB4KGkuY2xpZW50WCxpLmNsaWVudFkpLHRoaXMuX3NpbXVsYXRlRXZlbnQoIm1vdXNlbW92ZSIsaSl9LF9zaW11bGF0ZUV2ZW50OmZ1bmN0aW9uKHQsaSl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIik7ZS5fc2ltdWxhdGVkPSEwLGkudGFyZ2V0Ll9zaW11bGF0ZWRDbGljaz0hMCxlLmluaXRNb3VzZUV2ZW50KHQsITAsITAsd2luZG93LDEsaS5zY3JlZW5YLGkuc2NyZWVuWSxpLmNsaWVudFgsaS5jbGllbnRZLCExLCExLCExLCExLDAsbnVsbCksaS50YXJnZXQuZGlzcGF0Y2hFdmVudChlKX19KTtxaSYmIVZpJiZiZS5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsInRhcCIsU24pLGJlLm1lcmdlT3B0aW9ucyh7dG91Y2hab29tOnFpJiYhTWksYm91bmNlQXRab29tTGltaXRzOiEwfSk7dmFyIFpuPUVlLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtRKHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LXRvdWNoLXpvb20iKSxtdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3R0KHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LXRvdWNoLXpvb20iKSxmdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LHRoaXMpfSxfb25Ub3VjaFN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcDtpZih0LnRvdWNoZXMmJjI9PT10LnRvdWNoZXMubGVuZ3RoJiYhaS5fYW5pbWF0aW5nWm9vbSYmIXRoaXMuX3pvb21pbmcpe3ZhciBlPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzBdKSxuPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzFdKTt0aGlzLl9jZW50ZXJQb2ludD1pLmdldFNpemUoKS5fZGl2aWRlQnkoMiksdGhpcy5fc3RhcnRMYXRMbmc9aS5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX2NlbnRlclBvaW50KSwiY2VudGVyIiE9PWkub3B0aW9ucy50b3VjaFpvb20mJih0aGlzLl9waW5jaFN0YXJ0TGF0TG5nPWkuY29udGFpbmVyUG9pbnRUb0xhdExuZyhlLmFkZChuKS5fZGl2aWRlQnkoMikpKSx0aGlzLl9zdGFydERpc3Q9ZS5kaXN0YW5jZVRvKG4pLHRoaXMuX3N0YXJ0Wm9vbT1pLmdldFpvb20oKSx0aGlzLl9tb3ZlZD0hMSx0aGlzLl96b29taW5nPSEwLGkuX3N0b3AoKSxtdChkb2N1bWVudCwidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZSx0aGlzKSxtdChkb2N1bWVudCwidG91Y2hlbmQiLHRoaXMuX29uVG91Y2hFbmQsdGhpcyksUHQodCl9fSxfb25Ub3VjaE1vdmU6ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzJiYyPT09dC50b3VjaGVzLmxlbmd0aCYmdGhpcy5fem9vbWluZyl7dmFyIGk9dGhpcy5fbWFwLG49aS5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0LnRvdWNoZXNbMF0pLG89aS5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0LnRvdWNoZXNbMV0pLHM9bi5kaXN0YW5jZVRvKG8pL3RoaXMuX3N0YXJ0RGlzdDtpZih0aGlzLl96b29tPWkuZ2V0U2NhbGVab29tKHMsdGhpcy5fc3RhcnRab29tKSwhaS5vcHRpb25zLmJvdW5jZUF0Wm9vbUxpbWl0cyYmKHRoaXMuX3pvb208aS5nZXRNaW5ab29tKCkmJnM8MXx8dGhpcy5fem9vbT5pLmdldE1heFpvb20oKSYmcz4xKSYmKHRoaXMuX3pvb209aS5fbGltaXRab29tKHRoaXMuX3pvb20pKSwiY2VudGVyIj09PWkub3B0aW9ucy50b3VjaFpvb20pe2lmKHRoaXMuX2NlbnRlcj10aGlzLl9zdGFydExhdExuZywxPT09cylyZXR1cm59ZWxzZXt2YXIgcj1uLl9hZGQobykuX2RpdmlkZUJ5KDIpLl9zdWJ0cmFjdCh0aGlzLl9jZW50ZXJQb2ludCk7aWYoMT09PXMmJjA9PT1yLngmJjA9PT1yLnkpcmV0dXJuO3RoaXMuX2NlbnRlcj1pLnVucHJvamVjdChpLnByb2plY3QodGhpcy5fcGluY2hTdGFydExhdExuZyx0aGlzLl96b29tKS5zdWJ0cmFjdChyKSx0aGlzLl96b29tKX10aGlzLl9tb3ZlZHx8KGkuX21vdmVTdGFydCghMCwhMSksdGhpcy5fbW92ZWQ9ITApLGcodGhpcy5fYW5pbVJlcXVlc3QpO3ZhciBhPWUoaS5fbW92ZSxpLHRoaXMuX2NlbnRlcix0aGlzLl96b29tLHtwaW5jaDohMCxyb3VuZDohMX0pO3RoaXMuX2FuaW1SZXF1ZXN0PWYoYSx0aGlzLCEwKSxQdCh0KX19LF9vblRvdWNoRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZWQmJnRoaXMuX3pvb21pbmc/KHRoaXMuX3pvb21pbmc9ITEsZyh0aGlzLl9hbmltUmVxdWVzdCksZnQoZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUpLGZ0KGRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCksdGhpcy5fbWFwLm9wdGlvbnMuem9vbUFuaW1hdGlvbj90aGlzLl9tYXAuX2FuaW1hdGVab29tKHRoaXMuX2NlbnRlcix0aGlzLl9tYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSwhMCx0aGlzLl9tYXAub3B0aW9ucy56b29tU25hcCk6dGhpcy5fbWFwLl9yZXNldFZpZXcodGhpcy5fY2VudGVyLHRoaXMuX21hcC5fbGltaXRab29tKHRoaXMuX3pvb20pKSk6dGhpcy5fem9vbWluZz0hMX19KTtiZS5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsInRvdWNoWm9vbSIsWm4pLGJlLkJveFpvb209Ym4sYmUuRG91YmxlQ2xpY2tab29tPVRuLGJlLkRyYWc9em4sYmUuS2V5Ym9hcmQ9TW4sYmUuU2Nyb2xsV2hlZWxab29tPUNuLGJlLlRhcD1TbixiZS5Ub3VjaFpvb209Wm4sT2JqZWN0LmZyZWV6ZT10aSx0LnZlcnNpb249IjEuNC4wIix0LkNvbnRyb2w9VGUsdC5jb250cm9sPXplLHQuQnJvd3Nlcj1RaSx0LkV2ZW50ZWQ9Y2ksdC5NaXhpbj1CZSx0LlV0aWw9dWksdC5DbGFzcz12LHQuSGFuZGxlcj1FZSx0LmV4dGVuZD1pLHQuYmluZD1lLHQuc3RhbXA9bix0LnNldE9wdGlvbnM9bCx0LkRvbUV2ZW50PVBlLHQuRG9tVXRpbD12ZSx0LlBvc0FuaW1hdGlvbj1MZSx0LkRyYWdnYWJsZT1SZSx0LkxpbmVVdGlsPU5lLHQuUG9seVV0aWw9RGUsdC5Qb2ludD14LHQucG9pbnQ9dyx0LkJvdW5kcz1QLHQuYm91bmRzPWIsdC5UcmFuc2Zvcm1hdGlvbj1TLHQudHJhbnNmb3JtYXRpb249Wix0LlByb2plY3Rpb249SGUsdC5MYXRMbmc9TSx0LmxhdExuZz1DLHQuTGF0TG5nQm91bmRzPVQsdC5sYXRMbmdCb3VuZHM9eix0LkNSUz1kaSx0Lkdlb0pTT049c24sdC5nZW9KU09OPVh0LHQuZ2VvSnNvbj1hbix0LkxheWVyPXFlLHQuTGF5ZXJHcm91cD1HZSx0LmxheWVyR3JvdXA9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IEdlKHQsaSl9LHQuRmVhdHVyZUdyb3VwPUtlLHQuZmVhdHVyZUdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgS2UodCl9LHQuSW1hZ2VPdmVybGF5PWhuLHQuaW1hZ2VPdmVybGF5PWZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gbmV3IGhuKHQsaSxlKX0sdC5WaWRlb092ZXJsYXk9dW4sdC52aWRlb092ZXJsYXk9ZnVuY3Rpb24odCxpLGUpe3JldHVybiBuZXcgdW4odCxpLGUpfSx0LkRpdk92ZXJsYXk9bG4sdC5Qb3B1cD1jbix0LnBvcHVwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBjbih0LGkpfSx0LlRvb2x0aXA9X24sdC50b29sdGlwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBfbih0LGkpfSx0Lkljb249WWUsdC5pY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWWUodCl9LHQuRGl2SWNvbj1kbix0LmRpdkljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkbih0KX0sdC5NYXJrZXI9JGUsdC5tYXJrZXI9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3ICRlKHQsaSl9LHQuVGlsZUxheWVyPW1uLHQudGlsZUxheWVyPUp0LHQuR3JpZExheWVyPXBuLHQuZ3JpZExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcG4odCl9LHQuU1ZHPVBuLHQuc3ZnPVF0LHQuUmVuZGVyZXI9Z24sdC5DYW52YXM9dm4sdC5jYW52YXM9JHQsdC5QYXRoPVFlLHQuQ2lyY2xlTWFya2VyPXRuLHQuY2lyY2xlTWFya2VyPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyB0bih0LGkpfSx0LkNpcmNsZT1lbix0LmNpcmNsZT1mdW5jdGlvbih0LGksZSl7cmV0dXJuIG5ldyBlbih0LGksZSl9LHQuUG9seWxpbmU9bm4sdC5wb2x5bGluZT1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgbm4odCxpKX0sdC5Qb2x5Z29uPW9uLHQucG9seWdvbj1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgb24odCxpKX0sdC5SZWN0YW5nbGU9TG4sdC5yZWN0YW5nbGU9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IExuKHQsaSl9LHQuTWFwPWJlLHQubWFwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBiZSh0LGkpfTt2YXIgRW49d2luZG93Lkw7dC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5MPUVuLHRoaXN9LHdpbmRvdy5MPXR9KTsK</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/Core.OpenStreetMap.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgouT3BlblN0cmVldE1hcFdpbmRvdyB7CiAgICBtYXJnaW4tYm90dG9tOiA3cHg7CiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1ZjU7CiAgICBib3gtc2hhZG93OiAxcHggMXB4IDBweCAjZTllOWU5OwogICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICBtYXJnaW4tdG9wOiAxNnB4Owp9CgouT3BlblN0cmVldE1hcFdpbmRvdyA+IC5Db250ZW50IHsKICAgIHBhZGRpbmc6IDhweCA4cHggMTBweCAxMHB4OwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAwJTsKfQoKfQo=</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/thirdparty/leaflet-1.4.0/leaflet.css" Permission="660" Encode="Base64">LyogcmVxdWlyZWQgc3R5bGVzICovCgoubGVhZmxldC1wYW5lLAoubGVhZmxldC10aWxlLAoubGVhZmxldC1tYXJrZXItaWNvbiwKLmxlYWZsZXQtbWFya2VyLXNoYWRvdywKLmxlYWZsZXQtdGlsZS1jb250YWluZXIsCi5sZWFmbGV0LXBhbmUgPiBzdmcsCi5sZWFmbGV0LXBhbmUgPiBjYW52YXMsCi5sZWFmbGV0LXpvb20tYm94LAoubGVhZmxldC1pbWFnZS1sYXllciwKLmxlYWZsZXQtbGF5ZXIgewoJcG9zaXRpb246IGFic29sdXRlOwoJbGVmdDogMDsKCXRvcDogMDsKCX0KLmxlYWZsZXQtY29udGFpbmVyIHsKCW92ZXJmbG93OiBoaWRkZW47Cgl9Ci5sZWFmbGV0LXRpbGUsCi5sZWFmbGV0LW1hcmtlci1pY29uLAoubGVhZmxldC1tYXJrZXItc2hhZG93IHsKCS13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CgkgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwoJICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKCSAgLXdlYmtpdC11c2VyLWRyYWc6IG5vbmU7Cgl9Ci8qIFNhZmFyaSByZW5kZXJzIG5vbi1yZXRpbmEgdGlsZSBvbiByZXRpbmEgYmV0dGVyIHdpdGggdGhpcywgYnV0IENocm9tZSBpcyB3b3JzZSAqLwoubGVhZmxldC1zYWZhcmkgLmxlYWZsZXQtdGlsZSB7CglpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7Cgl9Ci8qIGhhY2sgdGhhdCBwcmV2ZW50cyBodyBsYXllcnMgInN0cmV0Y2hpbmciIHdoZW4gbG9hZGluZyBuZXcgdGlsZXMgKi8KLmxlYWZsZXQtc2FmYXJpIC5sZWFmbGV0LXRpbGUtY29udGFpbmVyIHsKCXdpZHRoOiAxNjAwcHg7CgloZWlnaHQ6IDE2MDBweDsKCS13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCAwOwoJfQoubGVhZmxldC1tYXJrZXItaWNvbiwKLmxlYWZsZXQtbWFya2VyLXNoYWRvdyB7CglkaXNwbGF5OiBibG9jazsKCX0KLyogLmxlYWZsZXQtY29udGFpbmVyIHN2ZzogcmVzZXQgc3ZnIG1heC13aWR0aCBkZWNsZXJhdGlvbiBzaGlwcGVkIGluIEpvb21sYSEgKGpvb21sYS5vcmcpIDMueCAqLwovKiAubGVhZmxldC1jb250YWluZXIgaW1nOiBtYXAgaXMgYnJva2VuIGluIEZGIGlmIHlvdSBoYXZlIG1heC13aWR0aDogMTAwJSBvbiB0aWxlcyAqLwoubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtb3ZlcmxheS1wYW5lIHN2ZywKLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LW1hcmtlci1wYW5lIGltZywKLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXNoYWRvdy1wYW5lIGltZywKLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXRpbGUtcGFuZSBpbWcsCi5sZWFmbGV0LWNvbnRhaW5lciBpbWcubGVhZmxldC1pbWFnZS1sYXllciwKLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXRpbGUgewoJbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7CgltYXgtaGVpZ2h0OiBub25lICFpbXBvcnRhbnQ7Cgl9CgoubGVhZmxldC1jb250YWluZXIubGVhZmxldC10b3VjaC16b29tIHsKCS1tcy10b3VjaC1hY3Rpb246IHBhbi14IHBhbi15OwoJdG91Y2gtYWN0aW9uOiBwYW4teCBwYW4teTsKCX0KLmxlYWZsZXQtY29udGFpbmVyLmxlYWZsZXQtdG91Y2gtZHJhZyB7CgktbXMtdG91Y2gtYWN0aW9uOiBwaW5jaC16b29tOwoJLyogRmFsbGJhY2sgZm9yIEZGIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBwaW5jaC16b29tICovCgl0b3VjaC1hY3Rpb246IG5vbmU7Cgl0b3VjaC1hY3Rpb246IHBpbmNoLXpvb207Cn0KLmxlYWZsZXQtY29udGFpbmVyLmxlYWZsZXQtdG91Y2gtZHJhZy5sZWFmbGV0LXRvdWNoLXpvb20gewoJLW1zLXRvdWNoLWFjdGlvbjogbm9uZTsKCXRvdWNoLWFjdGlvbjogbm9uZTsKfQoubGVhZmxldC1jb250YWluZXIgewoJLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKfQoubGVhZmxldC1jb250YWluZXIgYSB7Cgktd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoNTEsIDE4MSwgMjI5LCAwLjQpOwp9Ci5sZWFmbGV0LXRpbGUgewoJZmlsdGVyOiBpbmhlcml0OwoJdmlzaWJpbGl0eTogaGlkZGVuOwoJfQoubGVhZmxldC10aWxlLWxvYWRlZCB7Cgl2aXNpYmlsaXR5OiBpbmhlcml0OwoJfQoubGVhZmxldC16b29tLWJveCB7Cgl3aWR0aDogMDsKCWhlaWdodDogMDsKCS1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKCSAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCXotaW5kZXg6IDgwMDsKCX0KLyogd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg4MzE5ICovCi5sZWFmbGV0LW92ZXJsYXktcGFuZSBzdmcgewoJLW1vei11c2VyLXNlbGVjdDogbm9uZTsKCX0KCi5sZWFmbGV0LXBhbmUgICAgICAgICB7IHotaW5kZXg6IDQwMDsgfQoKLmxlYWZsZXQtdGlsZS1wYW5lICAgIHsgei1pbmRleDogMjAwOyB9Ci5sZWFmbGV0LW92ZXJsYXktcGFuZSB7IHotaW5kZXg6IDQwMDsgfQoubGVhZmxldC1zaGFkb3ctcGFuZSAgeyB6LWluZGV4OiA1MDA7IH0KLmxlYWZsZXQtbWFya2VyLXBhbmUgIHsgei1pbmRleDogNjAwOyB9Ci5sZWFmbGV0LXRvb2x0aXAtcGFuZSAgIHsgei1pbmRleDogNjUwOyB9Ci5sZWFmbGV0LXBvcHVwLXBhbmUgICB7IHotaW5kZXg6IDcwMDsgfQoKLmxlYWZsZXQtbWFwLXBhbmUgY2FudmFzIHsgei1pbmRleDogMTAwOyB9Ci5sZWFmbGV0LW1hcC1wYW5lIHN2ZyAgICB7IHotaW5kZXg6IDIwMDsgfQoKLmxlYWZsZXQtdm1sLXNoYXBlIHsKCXdpZHRoOiAxcHg7CgloZWlnaHQ6IDFweDsKCX0KLmx2bWwgewoJYmVoYXZpb3I6IHVybCgjZGVmYXVsdCNWTUwpOwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJcG9zaXRpb246IGFic29sdXRlOwoJfQoKCi8qIGNvbnRyb2wgcG9zaXRpb25pbmcgKi8KCi5sZWFmbGV0LWNvbnRyb2wgewoJcG9zaXRpb246IHJlbGF0aXZlOwoJei1pbmRleDogODAwOwoJcG9pbnRlci1ldmVudHM6IHZpc2libGVQYWludGVkOyAvKiBJRSA5LTEwIGRvZXNuJ3QgaGF2ZSBhdXRvICovCglwb2ludGVyLWV2ZW50czogYXV0bzsKCX0KLmxlYWZsZXQtdG9wLAoubGVhZmxldC1ib3R0b20gewoJcG9zaXRpb246IGFic29sdXRlOwoJei1pbmRleDogMTAwMDsKCXBvaW50ZXItZXZlbnRzOiBub25lOwoJfQoubGVhZmxldC10b3AgewoJdG9wOiAwOwoJfQoubGVhZmxldC1yaWdodCB7CglyaWdodDogMDsKCX0KLmxlYWZsZXQtYm90dG9tIHsKCWJvdHRvbTogMDsKCX0KLmxlYWZsZXQtbGVmdCB7CglsZWZ0OiAwOwoJfQoubGVhZmxldC1jb250cm9sIHsKCWZsb2F0OiBsZWZ0OwoJY2xlYXI6IGJvdGg7Cgl9Ci5sZWFmbGV0LXJpZ2h0IC5sZWFmbGV0LWNvbnRyb2wgewoJZmxvYXQ6IHJpZ2h0OwoJfQoubGVhZmxldC10b3AgLmxlYWZsZXQtY29udHJvbCB7CgltYXJnaW4tdG9wOiAxMHB4OwoJfQoubGVhZmxldC1ib3R0b20gLmxlYWZsZXQtY29udHJvbCB7CgltYXJnaW4tYm90dG9tOiAxMHB4OwoJfQoubGVhZmxldC1sZWZ0IC5sZWFmbGV0LWNvbnRyb2wgewoJbWFyZ2luLWxlZnQ6IDEwcHg7Cgl9Ci5sZWFmbGV0LXJpZ2h0IC5sZWFmbGV0LWNvbnRyb2wgewoJbWFyZ2luLXJpZ2h0OiAxMHB4OwoJfQoKCi8qIHpvb20gYW5kIGZhZGUgYW5pbWF0aW9ucyAqLwoKLmxlYWZsZXQtZmFkZS1hbmltIC5sZWFmbGV0LXRpbGUgewoJd2lsbC1jaGFuZ2U6IG9wYWNpdHk7Cgl9Ci5sZWFmbGV0LWZhZGUtYW5pbSAubGVhZmxldC1wb3B1cCB7CglvcGFjaXR5OiAwOwoJLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyOwoJICAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyOwoJICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyOwoJfQoubGVhZmxldC1mYWRlLWFuaW0gLmxlYWZsZXQtbWFwLXBhbmUgLmxlYWZsZXQtcG9wdXAgewoJb3BhY2l0eTogMTsKCX0KLmxlYWZsZXQtem9vbS1hbmltYXRlZCB7Cgktd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgMDsKCSAgICAtbXMtdHJhbnNmb3JtLW9yaWdpbjogMCAwOwoJICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7Cgl9Ci5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC16b29tLWFuaW1hdGVkIHsKCXdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07Cgl9Ci5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC16b29tLWFuaW1hdGVkIHsKCS13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwwLjI1LDEpOwoJICAgLW1vei10cmFuc2l0aW9uOiAgICAtbW96LXRyYW5zZm9ybSAwLjI1cyBjdWJpYy1iZXppZXIoMCwwLDAuMjUsMSk7CgkgICAgICAgIHRyYW5zaXRpb246ICAgICAgICAgdHJhbnNmb3JtIDAuMjVzIGN1YmljLWJlemllcigwLDAsMC4yNSwxKTsKCX0KLmxlYWZsZXQtem9vbS1hbmltIC5sZWFmbGV0LXRpbGUsCi5sZWFmbGV0LXBhbi1hbmltIC5sZWFmbGV0LXRpbGUgewoJLXdlYmtpdC10cmFuc2l0aW9uOiBub25lOwoJICAgLW1vei10cmFuc2l0aW9uOiBub25lOwoJICAgICAgICB0cmFuc2l0aW9uOiBub25lOwoJfQoKLmxlYWZsZXQtem9vbS1hbmltIC5sZWFmbGV0LXpvb20taGlkZSB7Cgl2aXNpYmlsaXR5OiBoaWRkZW47Cgl9CgoKLyogY3Vyc29ycyAqLwoKLmxlYWZsZXQtaW50ZXJhY3RpdmUgewoJY3Vyc29yOiBwb2ludGVyOwoJfQoubGVhZmxldC1ncmFiIHsKCWN1cnNvcjogLXdlYmtpdC1ncmFiOwoJY3Vyc29yOiAgICAtbW96LWdyYWI7CgljdXJzb3I6ICAgICAgICAgZ3JhYjsKCX0KLmxlYWZsZXQtY3Jvc3NoYWlyLAoubGVhZmxldC1jcm9zc2hhaXIgLmxlYWZsZXQtaW50ZXJhY3RpdmUgewoJY3Vyc29yOiBjcm9zc2hhaXI7Cgl9Ci5sZWFmbGV0LXBvcHVwLXBhbmUsCi5sZWFmbGV0LWNvbnRyb2wgewoJY3Vyc29yOiBhdXRvOwoJfQoubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1ncmFiLAoubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1ncmFiIC5sZWFmbGV0LWludGVyYWN0aXZlLAoubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIHsKCWN1cnNvcjogbW92ZTsKCWN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKCWN1cnNvcjogICAgLW1vei1ncmFiYmluZzsKCWN1cnNvcjogICAgICAgICBncmFiYmluZzsKCX0KCi8qIG1hcmtlciAmIG92ZXJsYXlzIGludGVyYWN0aXZpdHkgKi8KLmxlYWZsZXQtbWFya2VyLWljb24sCi5sZWFmbGV0LW1hcmtlci1zaGFkb3csCi5sZWFmbGV0LWltYWdlLWxheWVyLAoubGVhZmxldC1wYW5lID4gc3ZnIHBhdGgsCi5sZWFmbGV0LXRpbGUtY29udGFpbmVyIHsKCXBvaW50ZXItZXZlbnRzOiBub25lOwoJfQoKLmxlYWZsZXQtbWFya2VyLWljb24ubGVhZmxldC1pbnRlcmFjdGl2ZSwKLmxlYWZsZXQtaW1hZ2UtbGF5ZXIubGVhZmxldC1pbnRlcmFjdGl2ZSwKLmxlYWZsZXQtcGFuZSA+IHN2ZyBwYXRoLmxlYWZsZXQtaW50ZXJhY3RpdmUgewoJcG9pbnRlci1ldmVudHM6IHZpc2libGVQYWludGVkOyAvKiBJRSA5LTEwIGRvZXNuJ3QgaGF2ZSBhdXRvICovCglwb2ludGVyLWV2ZW50czogYXV0bzsKCX0KCi8qIHZpc3VhbCB0d2Vha3MgKi8KCi5sZWFmbGV0LWNvbnRhaW5lciB7CgliYWNrZ3JvdW5kOiAjZGRkOwoJb3V0bGluZTogMDsKCX0KLmxlYWZsZXQtY29udGFpbmVyIGEgewoJY29sb3I6ICMwMDc4QTg7Cgl9Ci5sZWFmbGV0LWNvbnRhaW5lciBhLmxlYWZsZXQtYWN0aXZlIHsKCW91dGxpbmU6IDJweCBzb2xpZCBvcmFuZ2U7Cgl9Ci5sZWFmbGV0LXpvb20tYm94IHsKCWJvcmRlcjogMnB4IGRvdHRlZCAjMzhmOwoJYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjUpOwoJfQoKCi8qIGdlbmVyYWwgdHlwb2dyYXBoeSAqLwoubGVhZmxldC1jb250YWluZXIgewoJZm9udDogMTJweC8xLjUgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKCX0KCgovKiBnZW5lcmFsIHRvb2xiYXIgc3R5bGVzICovCgoubGVhZmxldC1iYXIgewoJYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC42NSk7Cglib3JkZXItcmFkaXVzOiA0cHg7Cgl9Ci5sZWFmbGV0LWJhciBhLAoubGVhZmxldC1iYXIgYTpob3ZlciB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwoJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7Cgl3aWR0aDogMjZweDsKCWhlaWdodDogMjZweDsKCWxpbmUtaGVpZ2h0OiAyNnB4OwoJZGlzcGxheTogYmxvY2s7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cgljb2xvcjogYmxhY2s7Cgl9Ci5sZWFmbGV0LWJhciBhLAoubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUgewoJYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsKCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CglkaXNwbGF5OiBibG9jazsKCX0KLmxlYWZsZXQtYmFyIGE6aG92ZXIgewoJYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDsKCX0KLmxlYWZsZXQtYmFyIGE6Zmlyc3QtY2hpbGQgewoJYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OwoJYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsKCX0KLmxlYWZsZXQtYmFyIGE6bGFzdC1jaGlsZCB7Cglib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7Cglib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OwoJYm9yZGVyLWJvdHRvbTogbm9uZTsKCX0KLmxlYWZsZXQtYmFyIGEubGVhZmxldC1kaXNhYmxlZCB7CgljdXJzb3I6IGRlZmF1bHQ7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0OwoJY29sb3I6ICNiYmI7Cgl9CgoubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgYSB7Cgl3aWR0aDogMzBweDsKCWhlaWdodDogMzBweDsKCWxpbmUtaGVpZ2h0OiAzMHB4OwoJfQoubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgYTpmaXJzdC1jaGlsZCB7Cglib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7Cglib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4OwoJfQoubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgYTpsYXN0LWNoaWxkIHsKCWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDJweDsKCWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7Cgl9CgovKiB6b29tIGNvbnRyb2wgKi8KCi5sZWFmbGV0LWNvbnRyb2wtem9vbS1pbiwKLmxlYWZsZXQtY29udHJvbC16b29tLW91dCB7Cglmb250OiBib2xkIDE4cHggJ0x1Y2lkYSBDb25zb2xlJywgTW9uYWNvLCBtb25vc3BhY2U7Cgl0ZXh0LWluZGVudDogMXB4OwoJfQoKLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC16b29tLWluLCAubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLXpvb20tb3V0ICB7Cglmb250LXNpemU6IDIycHg7Cgl9CgoKLyogbGF5ZXJzIGNvbnRyb2wgKi8KCi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIHsKCWJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuNCk7CgliYWNrZ3JvdW5kOiAjZmZmOwoJYm9yZGVyLXJhZGl1czogNXB4OwoJfQoubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUgewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9sYXllcnMucG5nKTsKCXdpZHRoOiAzNnB4OwoJaGVpZ2h0OiAzNnB4OwoJfQoubGVhZmxldC1yZXRpbmEgLmxlYWZsZXQtY29udHJvbC1sYXllcnMtdG9nZ2xlIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvbGF5ZXJzLTJ4LnBuZyk7CgliYWNrZ3JvdW5kLXNpemU6IDI2cHggMjZweDsKCX0KLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC1sYXllcnMtdG9nZ2xlIHsKCXdpZHRoOiA0NHB4OwoJaGVpZ2h0OiA0NHB4OwoJfQoubGVhZmxldC1jb250cm9sLWxheWVycyAubGVhZmxldC1jb250cm9sLWxheWVycy1saXN0LAoubGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCAubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUgewoJZGlzcGxheTogbm9uZTsKCX0KLmxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQgLmxlYWZsZXQtY29udHJvbC1sYXllcnMtbGlzdCB7CglkaXNwbGF5OiBibG9jazsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKCX0KLmxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQgewoJcGFkZGluZzogNnB4IDEwcHggNnB4IDZweDsKCWNvbG9yOiAjMzMzOwoJYmFja2dyb3VuZDogI2ZmZjsKCX0KLmxlYWZsZXQtY29udHJvbC1sYXllcnMtc2Nyb2xsYmFyIHsKCW92ZXJmbG93LXk6IHNjcm9sbDsKCW92ZXJmbG93LXg6IGhpZGRlbjsKCXBhZGRpbmctcmlnaHQ6IDVweDsKCX0KLmxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3IgewoJbWFyZ2luLXRvcDogMnB4OwoJcG9zaXRpb246IHJlbGF0aXZlOwoJdG9wOiAxcHg7Cgl9Ci5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIGxhYmVsIHsKCWRpc3BsYXk6IGJsb2NrOwoJfQoubGVhZmxldC1jb250cm9sLWxheWVycy1zZXBhcmF0b3IgewoJaGVpZ2h0OiAwOwoJYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7CgltYXJnaW46IDVweCAtMTBweCA1cHggLTZweDsKCX0KCi8qIERlZmF1bHQgaWNvbiBVUkxzICovCi5sZWFmbGV0LWRlZmF1bHQtaWNvbi1wYXRoIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvbWFya2VyLWljb24ucG5nKTsKCX0KCgovKiBhdHRyaWJ1dGlvbiBhbmQgc2NhbGUgY29udHJvbHMgKi8KCi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIHsKCWJhY2tncm91bmQ6ICNmZmY7CgliYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CgltYXJnaW46IDA7Cgl9Ci5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24sCi5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZSB7CglwYWRkaW5nOiAwIDVweDsKCWNvbG9yOiAjMzMzOwoJfQoubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIGEgewoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwoJfQoubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIGE6aG92ZXIgewoJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cgl9Ci5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uLAoubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7Cglmb250LXNpemU6IDExcHg7Cgl9Ci5sZWFmbGV0LWxlZnQgLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7CgltYXJnaW4tbGVmdDogNXB4OwoJfQoubGVhZmxldC1ib3R0b20gLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7CgltYXJnaW4tYm90dG9tOiA1cHg7Cgl9Ci5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZSB7Cglib3JkZXI6IDJweCBzb2xpZCAjNzc3OwoJYm9yZGVyLXRvcDogbm9uZTsKCWxpbmUtaGVpZ2h0OiAxLjE7CglwYWRkaW5nOiAycHggNXB4IDFweDsKCWZvbnQtc2l6ZTogMTFweDsKCXdoaXRlLXNwYWNlOiBub3dyYXA7CglvdmVyZmxvdzogaGlkZGVuOwoJLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwoJICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwoKCWJhY2tncm91bmQ6ICNmZmY7CgliYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cgl9Ci5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZTpub3QoOmZpcnN0LWNoaWxkKSB7Cglib3JkZXItdG9wOiAycHggc29saWQgIzc3NzsKCWJvcmRlci1ib3R0b206IG5vbmU7CgltYXJnaW4tdG9wOiAtMnB4OwoJfQoubGVhZmxldC1jb250cm9sLXNjYWxlLWxpbmU6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7Cglib3JkZXItYm90dG9tOiAycHggc29saWQgIzc3NzsKCX0KCi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24sCi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLAoubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgewoJYm94LXNoYWRvdzogbm9uZTsKCX0KLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC1sYXllcnMsCi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWJhciB7Cglib3JkZXI6IDJweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7CgliYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OwoJfQoKCi8qIHBvcHVwICovCgoubGVhZmxldC1wb3B1cCB7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7CgltYXJnaW4tYm90dG9tOiAyMHB4OwoJfQoubGVhZmxldC1wb3B1cC1jb250ZW50LXdyYXBwZXIgewoJcGFkZGluZzogMXB4OwoJdGV4dC1hbGlnbjogbGVmdDsKCWJvcmRlci1yYWRpdXM6IDEycHg7Cgl9Ci5sZWFmbGV0LXBvcHVwLWNvbnRlbnQgewoJbWFyZ2luOiAxM3B4IDE5cHg7CglsaW5lLWhlaWdodDogMS40OwoJfQoubGVhZmxldC1wb3B1cC1jb250ZW50IHAgewoJbWFyZ2luOiAxOHB4IDA7Cgl9Ci5sZWFmbGV0LXBvcHVwLXRpcC1jb250YWluZXIgewoJd2lkdGg6IDQwcHg7CgloZWlnaHQ6IDIwcHg7Cglwb3NpdGlvbjogYWJzb2x1dGU7CglsZWZ0OiA1MCU7CgltYXJnaW4tbGVmdDogLTIwcHg7CglvdmVyZmxvdzogaGlkZGVuOwoJcG9pbnRlci1ldmVudHM6IG5vbmU7Cgl9Ci5sZWFmbGV0LXBvcHVwLXRpcCB7Cgl3aWR0aDogMTdweDsKCWhlaWdodDogMTdweDsKCXBhZGRpbmc6IDFweDsKCgltYXJnaW46IC0xMHB4IGF1dG8gMDsKCgktd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKCSAgIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwoJICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CgkgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKCX0KLmxlYWZsZXQtcG9wdXAtY29udGVudC13cmFwcGVyLAoubGVhZmxldC1wb3B1cC10aXAgewoJYmFja2dyb3VuZDogd2hpdGU7Cgljb2xvcjogIzMzMzsKCWJveC1zaGFkb3c6IDAgM3B4IDE0cHggcmdiYSgwLDAsMCwwLjQpOwoJfQoubGVhZmxldC1jb250YWluZXIgYS5sZWFmbGV0LXBvcHVwLWNsb3NlLWJ1dHRvbiB7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl0b3A6IDA7CglyaWdodDogMDsKCXBhZGRpbmc6IDRweCA0cHggMCAwOwoJYm9yZGVyOiBub25lOwoJdGV4dC1hbGlnbjogY2VudGVyOwoJd2lkdGg6IDE4cHg7CgloZWlnaHQ6IDE0cHg7Cglmb250OiAxNnB4LzE0cHggVGFob21hLCBWZXJkYW5hLCBzYW5zLXNlcmlmOwoJY29sb3I6ICNjM2MzYzM7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cglmb250LXdlaWdodDogYm9sZDsKCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwoJfQoubGVhZmxldC1jb250YWluZXIgYS5sZWFmbGV0LXBvcHVwLWNsb3NlLWJ1dHRvbjpob3ZlciB7Cgljb2xvcjogIzk5OTsKCX0KLmxlYWZsZXQtcG9wdXAtc2Nyb2xsZWQgewoJb3ZlcmZsb3c6IGF1dG87Cglib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDsKCWJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOwoJfQoKLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtY29udGVudC13cmFwcGVyIHsKCXpvb206IDE7Cgl9Ci5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLXRpcCB7Cgl3aWR0aDogMjRweDsKCW1hcmdpbjogMCBhdXRvOwoKCS1tcy1maWx0ZXI6ICJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuTWF0cml4KE0xMT0wLjcwNzEwNjc4LCBNMTI9MC43MDcxMDY3OCwgTTIxPS0wLjcwNzEwNjc4LCBNMjI9MC43MDcxMDY3OCkiOwoJZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuTWF0cml4KE0xMT0wLjcwNzEwNjc4LCBNMTI9MC43MDcxMDY3OCwgTTIxPS0wLjcwNzEwNjc4LCBNMjI9MC43MDcxMDY3OCk7Cgl9Ci5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLXRpcC1jb250YWluZXIgewoJbWFyZ2luLXRvcDogLTFweDsKCX0KCi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LWNvbnRyb2wtem9vbSwKLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtY29udHJvbC1sYXllcnMsCi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLWNvbnRlbnQtd3JhcHBlciwKLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtdGlwIHsKCWJvcmRlcjogMXB4IHNvbGlkICM5OTk7Cgl9CgoKLyogZGl2IGljb24gKi8KCi5sZWFmbGV0LWRpdi1pY29uIHsKCWJhY2tncm91bmQ6ICNmZmY7Cglib3JkZXI6IDFweCBzb2xpZCAjNjY2OwoJfQoKCi8qIFRvb2x0aXAgKi8KLyogQmFzZSBzdHlsZXMgZm9yIHRoZSBlbGVtZW50IHRoYXQgaGFzIGEgdG9vbHRpcCAqLwoubGVhZmxldC10b29sdGlwIHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXBhZGRpbmc6IDZweDsKCWJhY2tncm91bmQtY29sb3I6ICNmZmY7Cglib3JkZXI6IDFweCBzb2xpZCAjZmZmOwoJYm9yZGVyLXJhZGl1czogM3B4OwoJY29sb3I6ICMyMjI7Cgl3aGl0ZS1zcGFjZTogbm93cmFwOwoJLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKCS1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CgktbXMtdXNlci1zZWxlY3Q6IG5vbmU7Cgl1c2VyLXNlbGVjdDogbm9uZTsKCXBvaW50ZXItZXZlbnRzOiBub25lOwoJYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40KTsKCX0KLmxlYWZsZXQtdG9vbHRpcC5sZWFmbGV0LWNsaWNrYWJsZSB7CgljdXJzb3I6IHBvaW50ZXI7Cglwb2ludGVyLWV2ZW50czogYXV0bzsKCX0KLmxlYWZsZXQtdG9vbHRpcC10b3A6YmVmb3JlLAoubGVhZmxldC10b29sdGlwLWJvdHRvbTpiZWZvcmUsCi5sZWFmbGV0LXRvb2x0aXAtbGVmdDpiZWZvcmUsCi5sZWFmbGV0LXRvb2x0aXAtcmlnaHQ6YmVmb3JlIHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXBvaW50ZXItZXZlbnRzOiBub25lOwoJYm9yZGVyOiA2cHggc29saWQgdHJhbnNwYXJlbnQ7CgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKCWNvbnRlbnQ6ICIiOwoJfQoKLyogRGlyZWN0aW9ucyAqLwoKLmxlYWZsZXQtdG9vbHRpcC1ib3R0b20gewoJbWFyZ2luLXRvcDogNnB4Owp9Ci5sZWFmbGV0LXRvb2x0aXAtdG9wIHsKCW1hcmdpbi10b3A6IC02cHg7Cn0KLmxlYWZsZXQtdG9vbHRpcC1ib3R0b206YmVmb3JlLAoubGVhZmxldC10b29sdGlwLXRvcDpiZWZvcmUgewoJbGVmdDogNTAlOwoJbWFyZ2luLWxlZnQ6IC02cHg7Cgl9Ci5sZWFmbGV0LXRvb2x0aXAtdG9wOmJlZm9yZSB7Cglib3R0b206IDA7CgltYXJnaW4tYm90dG9tOiAtMTJweDsKCWJvcmRlci10b3AtY29sb3I6ICNmZmY7Cgl9Ci5sZWFmbGV0LXRvb2x0aXAtYm90dG9tOmJlZm9yZSB7Cgl0b3A6IDA7CgltYXJnaW4tdG9wOiAtMTJweDsKCW1hcmdpbi1sZWZ0OiAtNnB4OwoJYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKCX0KLmxlYWZsZXQtdG9vbHRpcC1sZWZ0IHsKCW1hcmdpbi1sZWZ0OiAtNnB4Owp9Ci5sZWFmbGV0LXRvb2x0aXAtcmlnaHQgewoJbWFyZ2luLWxlZnQ6IDZweDsKfQoubGVhZmxldC10b29sdGlwLWxlZnQ6YmVmb3JlLAoubGVhZmxldC10b29sdGlwLXJpZ2h0OmJlZm9yZSB7Cgl0b3A6IDUwJTsKCW1hcmdpbi10b3A6IC02cHg7Cgl9Ci5sZWFmbGV0LXRvb2x0aXAtbGVmdDpiZWZvcmUgewoJcmlnaHQ6IDA7CgltYXJnaW4tcmlnaHQ6IC0xMnB4OwoJYm9yZGVyLWxlZnQtY29sb3I6ICNmZmY7Cgl9Ci5sZWFmbGV0LXRvb2x0aXAtcmlnaHQ6YmVmb3JlIHsKCWxlZnQ6IDA7CgltYXJnaW4tbGVmdDogLTEycHg7Cglib3JkZXItcmlnaHQtY29sb3I6ICNmZmY7Cgl9Cgo=</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/thirdparty/nvd3-1.7.1/nv.d3.css" Permission="660" Encode="Base64">LyoqKioqKioqKioqKioqKioqKioqCiAqIFNWRyBDU1MKICovCgoKc3ZnIHsKICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7CiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgLyogVHJ5aW5nIHRvIGdldCBTVkcgdG8gYWN0IGxpa2UgYSBncmVlZHkgYmxvY2sgaW4gYWxsIGJyb3dzZXJzICovCiAgZGlzcGxheTogYmxvY2s7Ci8qIFJvdGhlciBPU1MgLyBPcGVuU3RyZWV0TWFwCiAgd2lkdGg6MTAwJTsKICBoZWlnaHQ6MTAwJTsKRU8gUm90aGVyICovCn0KCi8qKioqKioqKioqKioqKioqKioqKgogIERlZmF1bHQgQ1NTIGZvciBhbiBzdmcgZWxlbWVudCBudmQzIHVzZWQKKi8Kc3ZnLm52ZDMtc3ZnIHsKICAgIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBkaXNwbGF5OiBibG9jazsKLyogUm90aGVyIE9TUyAvIE9wZW5TdHJlZXRNYXAgKi8KICAgIHdpZHRoOjEwMCU7CiAgICBoZWlnaHQ6MTAwJTsKLyogRU8gUm90aGVyICovCn0KCi8qKioqKioqKioqKioqKioqKioqKgogIEJveCBzaGFkb3cgYW5kIGJvcmRlciByYWRpdXMgc3R5bGluZwoqLwoubnZ0b29sdGlwLndpdGgtM2Qtc2hhZG93LCAud2l0aC0zZC1zaGFkb3cgLm52dG9vbHRpcCB7CiAgLW1vei1ib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpOwogIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsMCwwLC4yKTsKICBib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpOwoKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsKICBib3JkZXItcmFkaXVzOiA1cHg7Cn0KCi8qKioqKioqKioqKioqKioqKioqKgogKiBUT09MVElQIENTUwogKi8KCi5udnRvb2x0aXAgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDEuMCk7CiAgcGFkZGluZzogMXB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwwLDAsLjIpOwogIHotaW5kZXg6IDEwMDAwOwoKICBmb250LWZhbWlseTogQXJpYWw7CiAgZm9udC1zaXplOiAxM3B4OwogIHRleHQtYWxpZ246IGxlZnQ7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogIHdoaXRlLXNwYWNlOiBub3dyYXA7CgogIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogIC1raHRtbC11c2VyLXNlbGVjdDogbm9uZTsKICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLypHaXZlIHRvb2x0aXBzIHRoYXQgb2xkIGZhZGUgaW4gdHJhbnNpdGlvbiBieQogICAgcHV0dGluZyBhICJ3aXRoLXRyYW5zaXRpb25zIiBjbGFzcyBvbiB0aGUgY29udGFpbmVyIGRpdi4KKi8KLm52dG9vbHRpcC53aXRoLXRyYW5zaXRpb25zLCAud2l0aC10cmFuc2l0aW9ucyAubnZ0b29sdGlwIHsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSA1MG1zIGxpbmVhcjsKICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgNTBtcyBsaW5lYXI7CgogIHRyYW5zaXRpb24tZGVsYXk6IDIwMG1zOwogIC1tb3otdHJhbnNpdGlvbi1kZWxheTogMjAwbXM7CiAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiAyMDBtczsKfQoKLm52dG9vbHRpcC54LW52dG9vbHRpcCwKLm52dG9vbHRpcC55LW52dG9vbHRpcCB7CiAgcGFkZGluZzogOHB4Owp9CgoubnZ0b29sdGlwIGgzIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogNHB4IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI0NywyNDcsMjQ3LDAuNzUpOwogIHRleHQtYWxpZ246IGNlbnRlcjsKCiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlYmViZWI7CgogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4IDVweCAwIDA7CiAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDsKICBib3JkZXItcmFkaXVzOiAxcHggNXB4IDAgMDsKfQoKLm52dG9vbHRpcCBwIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogNXB4IDE0cHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoubnZ0b29sdGlwIHNwYW4gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBtYXJnaW46IDJweCAwOwp9CgoubnZ0b29sdGlwIHRhYmxlIHsKICBtYXJnaW46IDZweDsKICBib3JkZXItc3BhY2luZzowOwp9CgoKLm52dG9vbHRpcCB0YWJsZSB0ZCB7CiAgcGFkZGluZzogMnB4IDlweCAycHggMDsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgoubnZ0b29sdGlwIHRhYmxlIHRkLmtleSB7CiAgZm9udC13ZWlnaHQ6bm9ybWFsOwp9Ci5udnRvb2x0aXAgdGFibGUgdGQudmFsdWUgewogIHRleHQtYWxpZ246IHJpZ2h0OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoubnZ0b29sdGlwIHRhYmxlIHRyLmhpZ2hsaWdodCB0ZCB7CiAgcGFkZGluZzogMXB4IDlweCAxcHggMDsKICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDsKICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7CiAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7CiAgYm9yZGVyLXRvcC13aWR0aDogMXB4Owp9CgoubnZ0b29sdGlwIHRhYmxlIHRkLmxlZ2VuZC1jb2xvci1ndWlkZSBkaXYgewogIHdpZHRoOiA4cHg7CiAgaGVpZ2h0OiA4cHg7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLm52dG9vbHRpcCAuZm9vdGVyIHsKICBwYWRkaW5nOiAzcHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoubnZ0b29sdGlwLXBlbmRpbmctcmVtb3ZhbCB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubnZkMyB0ZXh0IHsKICBmb250OiBub3JtYWwgMTJweCBBcmlhbDsKfQoKLm52ZDMgLnRpdGxlIHsKIGZvbnQ6IGJvbGQgMTRweCBBcmlhbDsKfQoKLm52ZDMgLm52LWJhY2tncm91bmQgewogIGZpbGw6IHdoaXRlOwogIGZpbGwtb3BhY2l0eTogMDsKfQoKLm52ZDMubnYtbm9EYXRhIHsKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCgovKioqKioqKioqKgoqICBCcnVzaAoqLwoKLm52LWJydXNoIC5leHRlbnQgewogIGZpbGwtb3BhY2l0eTogLjEyNTsKICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7Cn0KCgovKioqKioqKioqKgoqICBMZWdlbmQKKi8KCi5udmQzIC5udi1sZWdlbmQgLm52LXNlcmllcyB7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgoubnZkMyAubnYtbGVnZW5kIC5udi1kaXNhYmxlZCBjaXJjbGUgewogIGZpbGwtb3BhY2l0eTogMDsKfQoKCi8qKioqKioqKioqCiogIEF4ZXMKKi8KCi5heGlzIHsKICBvcGFjaXR5OiAxOwp9CgouYXhpcy5udi1kaXNhYmxlZCB7CiAgb3BhY2l0eTogMDsKfQoKLm52ZDMgLm52LWF4aXMgewogIHBvaW50ZXItZXZlbnRzOm5vbmU7Cn0KCi5udmQzIC5udi1heGlzIHBhdGggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjMDAwOwogIHN0cm9rZS1vcGFjaXR5OiAuNzU7CiAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgoubnZkMyAubnYtYXhpcyBwYXRoLmRvbWFpbiB7CiAgc3Ryb2tlLW9wYWNpdHk6IC43NTsKfQoKLm52ZDMgLm52LWF4aXMubnYteCBwYXRoLmRvbWFpbiB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7Cn0KCi5udmQzIC5udi1heGlzIGxpbmUgewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjZTVlNWU1OwogIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKfQoKLm52ZDMgLm52LWF4aXMgLnplcm8gbGluZSwKLyp0aGlzIHNlbGVjdG9yIG1heSBub3QgYmUgbmVjZXNzYXJ5Ki8gLm52ZDMgLm52LWF4aXMgbGluZS56ZXJvIHsKICBzdHJva2Utb3BhY2l0eTogLjc1Owp9CgoubnZkMyAubnYtYXhpcyAubnYtYXhpc01heE1pbiB0ZXh0IHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLm52ZDMgLnggIC5udi1heGlzIC5udi1heGlzTWF4TWluIHRleHQsCi5udmQzIC54MiAubnYtYXhpcyAubnYtYXhpc01heE1pbiB0ZXh0LAoubnZkMyAueDMgLm52LWF4aXMgLm52LWF4aXNNYXhNaW4gdGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZQp9CgoKLyoqKioqKioqKioKKiAgQnJ1c2gKKi8KCi5udi1icnVzaCAucmVzaXplIHBhdGggewogIGZpbGw6ICNlZWU7CiAgc3Ryb2tlOiAjNjY2Owp9CgoKLyoqKioqKioqKioKKiAgQmFycwoqLwoKLm52ZDMgLm52LWJhcnMgLm5lZ2F0aXZlIHJlY3QgewogICAgemZpbGw6IGJyb3duOwp9CgoubnZkMyAubnYtYmFycyByZWN0IHsKICB6ZmlsbDogc3RlZWxibHVlOwogIGZpbGwtb3BhY2l0eTogLjc1OwoKICB0cmFuc2l0aW9uOiBmaWxsLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhcjsKICAtd2Via2l0LXRyYW5zaXRpb246IGZpbGwtb3BhY2l0eSAyNTBtcyBsaW5lYXI7Cn0KCi5udmQzIC5udi1iYXJzIHJlY3QuaG92ZXIgewogIGZpbGwtb3BhY2l0eTogMTsKfQoKLm52ZDMgLm52LWJhcnMgLmhvdmVyIHJlY3QgewogIGZpbGw6IGxpZ2h0Ymx1ZTsKfQoKLm52ZDMgLm52LWJhcnMgdGV4dCB7CiAgZmlsbDogcmdiYSgwLDAsMCwwKTsKfQoKLm52ZDMgLm52LWJhcnMgLmhvdmVyIHRleHQgewogIGZpbGw6IHJnYmEoMCwwLDAsMSk7Cn0KCgovKioqKioqKioqKgoqICBCYXJzCiovCgoubnZkMyAubnYtbXVsdGliYXIgLm52LWdyb3VwcyByZWN0LAoubnZkMyAubnYtbXVsdGliYXJIb3Jpem9udGFsIC5udi1ncm91cHMgcmVjdCwKLm52ZDMgLm52LWRpc2NyZXRlYmFyIC5udi1ncm91cHMgcmVjdCB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CgogIHRyYW5zaXRpb246IGZpbGwtb3BhY2l0eSAyNTBtcyBsaW5lYXI7CiAgLW1vei10cmFuc2l0aW9uOiBmaWxsLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhcjsKfQoKLm52ZDMgLm52LW11bHRpYmFyIC5udi1ncm91cHMgcmVjdDpob3ZlciwKLm52ZDMgLm52LW11bHRpYmFySG9yaXpvbnRhbCAubnYtZ3JvdXBzIHJlY3Q6aG92ZXIsCi5udmQzIC5udi1kaXNjcmV0ZWJhciAubnYtZ3JvdXBzIHJlY3Q6aG92ZXIgewogIGZpbGwtb3BhY2l0eTogMTsKfQoKLm52ZDMgLm52LWRpc2NyZXRlYmFyIC5udi1ncm91cHMgdGV4dCwKLm52ZDMgLm52LW11bHRpYmFySG9yaXpvbnRhbCAubnYtZ3JvdXBzIHRleHQgewogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZpbGw6IHJnYmEoMCwwLDAsMSk7CiAgc3Ryb2tlOiByZ2JhKDAsMCwwLDApOwp9CgovKioqKioqKioqKioKKiAgUGllIENoYXJ0CiovCgoubnZkMy5udi1waWUgcGF0aCB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwoKfQoKLm52ZDMubnYtcGllIC5udi1waWUtdGl0bGUgewogICAgZm9udC1zaXplOiAyNHB4OwogICAgZmlsbDogcmdiYSgxOSwgMTk2LCAyNDksIDAuNTkpOwp9CgoubnZkMy5udi1waWUgLm52LXNsaWNlIHRleHQgewogIHN0cm9rZTogIzAwMDsKICBzdHJva2Utd2lkdGg6IDA7Cn0KCi5udmQzLm52LXBpZSBwYXRoIHsKICBzdHJva2U6ICNmZmY7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgc3Ryb2tlLW9wYWNpdHk6IDE7Cn0KCi5udmQzLm52LXBpZSAuaG92ZXIgcGF0aCB7CiAgZmlsbC1vcGFjaXR5OiAuNzsKfQoubnZkMy5udi1waWUgLm52LWxhYmVsIHsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoubnZkMy5udi1waWUgLm52LWxhYmVsIHJlY3QgewogIGZpbGwtb3BhY2l0eTogMDsKICBzdHJva2Utb3BhY2l0eTogMDsKfQoKLyoqKioqKioqKioKKiBMaW5lcwoqLwoKLm52ZDMgLm52LWdyb3VwcyBwYXRoLm52LWxpbmUgewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKfQoKLm52ZDMgLm52LWdyb3VwcyBwYXRoLm52LWxpbmUubnYtdGhpbi1saW5lIHsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKCi5udmQzIC5udi1ncm91cHMgcGF0aC5udi1hcmVhIHsKICBzdHJva2U6IG5vbmU7Cn0KCi5udmQzIC5udi1saW5lLmhvdmVyIHBhdGggewogIHN0cm9rZS13aWR0aDogNnB4Owp9CgoubnZkMy5udi1saW5lIC5udmQzLm52LXNjYXR0ZXIgLm52LWdyb3VwcyAubnYtcG9pbnQgewogIGZpbGwtb3BhY2l0eTogMDsKICBzdHJva2Utb3BhY2l0eTogMDsKfQoKLm52ZDMubnYtc2NhdHRlci5udi1zaW5nbGUtcG9pbnQgLm52LWdyb3VwcyAubnYtcG9pbnQgewogIGZpbGwtb3BhY2l0eTogLjUgIWltcG9ydGFudDsKICBzdHJva2Utb3BhY2l0eTogLjUgIWltcG9ydGFudDsKfQoKCi53aXRoLXRyYW5zaXRpb25zIC5udmQzIC5udi1ncm91cHMgLm52LXBvaW50IHsKICB0cmFuc2l0aW9uOiBzdHJva2Utd2lkdGggMjUwbXMgbGluZWFyLCBzdHJva2Utb3BhY2l0eSAyNTBtcyBsaW5lYXI7CiAgLW1vei10cmFuc2l0aW9uOiBzdHJva2Utd2lkdGggMjUwbXMgbGluZWFyLCBzdHJva2Utb3BhY2l0eSAyNTBtcyBsaW5lYXI7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBzdHJva2Utd2lkdGggMjUwbXMgbGluZWFyLCBzdHJva2Utb3BhY2l0eSAyNTBtcyBsaW5lYXI7Cgp9CgoubnZkMy5udi1zY2F0dGVyIC5udi1ncm91cHMgLm52LXBvaW50LmhvdmVyLAoubnZkMyAubnYtZ3JvdXBzIC5udi1wb2ludC5ob3ZlciB7CiAgc3Ryb2tlLXdpZHRoOiA3cHg7CiAgZmlsbC1vcGFjaXR5OiAuOTUgIWltcG9ydGFudDsKICBzdHJva2Utb3BhY2l0eTogLjk1ICFpbXBvcnRhbnQ7Cn0KCgoubnZkMyAubnYtcG9pbnQtcGF0aHMgcGF0aCB7CiAgc3Ryb2tlOiAjYWFhOwogIHN0cm9rZS1vcGFjaXR5OiAwOwogIGZpbGw6ICNlZWU7CiAgZmlsbC1vcGFjaXR5OiAwOwp9CgoKCi5udmQzIC5udi1pbmRleExpbmUgewogIGN1cnNvcjogZXctcmVzaXplOwp9CgoKLyoqKioqKioqKioKKiBEaXN0cmlidXRpb24KKi8KCi5udmQzIC5udi1kaXN0cmlidXRpb24gewogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoKLyoqKioqKioqKioKKiAgU2NhdHRlcgoqLwoKLm52ZDMgLm52LWdyb3VwcyAubnYtcG9pbnQuaG92ZXIgewogIHN0cm9rZS13aWR0aDogMjBweDsKICBzdHJva2Utb3BhY2l0eTogLjU7Cn0KCi5udmQzIC5udi1zY2F0dGVyIC5udi1wb2ludC5ob3ZlciB7CiAgZmlsbC1vcGFjaXR5OiAxOwp9CgoKLyoqKioqKioqKioKKiAgU3RhY2tlZCBBcmVhCiovCgoubnZkMy5udi1zdGFja2VkYXJlYSBwYXRoLm52LWFyZWEgewogIGZpbGwtb3BhY2l0eTogLjc7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwp9CgoubnZkMy5udi1zdGFja2VkYXJlYSBwYXRoLm52LWFyZWEuaG92ZXIgewogIGZpbGwtb3BhY2l0eTogLjk7Cn0KCgoubnZkMy5udi1zdGFja2VkYXJlYSAubnYtZ3JvdXBzIC5udi1wb2ludCB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgZmlsbC1vcGFjaXR5OiAwOwp9CgoKLyoqKioqKioqKioKKiAgTGluZSBQbHVzIEJhcgoqLwoKLm52ZDMubnYtbGluZVBsdXNCYXIgLm52LWJhciByZWN0IHsKICBmaWxsLW9wYWNpdHk6IC43NTsKfQoKLm52ZDMubnYtbGluZVBsdXNCYXIgLm52LWJhciByZWN0OmhvdmVyIHsKICBmaWxsLW9wYWNpdHk6IDE7Cn0KCgovKioqKioqKioqKgoqICBCdWxsZXQKKi8KCi5udmQzLm52LWJ1bGxldCB7IGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsgfQoubnZkMy5udi1idWxsZXQgLm52LW1lYXN1cmUgeyBmaWxsLW9wYWNpdHk6IC44OyB9Ci5udmQzLm52LWJ1bGxldCAubnYtbWVhc3VyZTpob3ZlciB7IGZpbGwtb3BhY2l0eTogMTsgfQoubnZkMy5udi1idWxsZXQgLm52LW1hcmtlciB7IHN0cm9rZTogIzAwMDsgc3Ryb2tlLXdpZHRoOiAycHg7IH0KLm52ZDMubnYtYnVsbGV0IC5udi1tYXJrZXJUcmlhbmdsZSB7IHN0cm9rZTogIzAwMDsgZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAxLjVweDsgfQoubnZkMy5udi1idWxsZXQgLm52LXRpY2sgbGluZSB7IHN0cm9rZTogIzY2Njsgc3Ryb2tlLXdpZHRoOiAuNXB4OyB9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2UubnYtczAgeyBmaWxsOiAjZWVlOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2UubnYtczEgeyBmaWxsOiAjZGRkOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2UubnYtczIgeyBmaWxsOiAjY2NjOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtdGl0bGUgeyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtc3VidGl0bGUgeyBmaWxsOiAjOTk5OyB9CgoKLm52ZDMubnYtYnVsbGV0IC5udi1yYW5nZSB7CiAgZmlsbDogI2JhYmFiYTsKICBmaWxsLW9wYWNpdHk6IC40Owp9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2U6aG92ZXIgewogIGZpbGwtb3BhY2l0eTogLjc7Cn0KCgovKioqKioqKioqKgoqIFNwYXJrbGluZQoqLwoKLm52ZDMubnYtc3BhcmtsaW5lIHBhdGggewogIGZpbGw6IG5vbmU7Cn0KCi5udmQzLm52LXNwYXJrbGluZXBsdXMgZy5udi1ob3ZlclZhbHVlIHsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm52ZDMubnYtc3BhcmtsaW5lcGx1cyAubnYtaG92ZXJWYWx1ZSBsaW5lIHsKICBzdHJva2U6ICMzMzM7CiAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKIH0KCi5udmQzLm52LXNwYXJrbGluZXBsdXMsCi5udmQzLm52LXNwYXJrbGluZXBsdXMgZyB7CiAgcG9pbnRlci1ldmVudHM6IGFsbDsKfQoKLm52ZDMgLm52LWhvdmVyQXJlYSB7CiAgZmlsbC1vcGFjaXR5OiAwOwogIHN0cm9rZS1vcGFjaXR5OiAwOwp9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzIC5udi14VmFsdWUsCi5udmQzLm52LXNwYXJrbGluZXBsdXMgLm52LXlWYWx1ZSB7CiAgc3Ryb2tlLXdpZHRoOiAwOwogIGZvbnQtc2l6ZTogLjllbTsKICBmb250LXdlaWdodDogbm9ybWFsOwp9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzIC5udi15VmFsdWUgewogIHN0cm9rZTogI2Y2NjsKfQoKLm52ZDMubnYtc3BhcmtsaW5lcGx1cyAubnYtbWF4VmFsdWUgewogIHN0cm9rZTogIzJjYTAyYzsKICBmaWxsOiAjMmNhMDJjOwp9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzIC5udi1taW5WYWx1ZSB7CiAgc3Ryb2tlOiAjZDYyNzI4OwogIGZpbGw6ICNkNjI3Mjg7Cn0KCi5udmQzLm52LXNwYXJrbGluZXBsdXMgLm52LWN1cnJlbnRWYWx1ZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1zaXplOiAxLjFlbTsKfQoKLyoqKioqKioqKioKKiBoaXN0b3JpY2FsIHN0b2NrCiovCgoubnZkMy5udi1vaGxjQmFyIC5udi10aWNrcyAubnYtdGljayB7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5udmQzLm52LW9obGNCYXIgLm52LXRpY2tzIC5udi10aWNrLmhvdmVyIHsKICBzdHJva2Utd2lkdGg6IDJweDsKfQoKLm52ZDMubnYtb2hsY0JhciAubnYtdGlja3MgLm52LXRpY2sucG9zaXRpdmUgewogICAgc3Ryb2tlOiAjMmNhMDJjOwp9CgoubnZkMy5udi1vaGxjQmFyIC5udi10aWNrcyAubnYtdGljay5uZWdhdGl2ZSB7CiAgICBzdHJva2U6ICNkNjI3Mjg7Cn0KCi5udmQzLm52LWhpc3RvcmljYWxTdG9ja0NoYXJ0IC5udi1heGlzIC5udi1heGlzbGFiZWwgewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoubnZkMy5udi1oaXN0b3JpY2FsU3RvY2tDaGFydCAubnYtZHJhZ1RhcmdldCB7CiAgZmlsbC1vcGFjaXR5OiAwOwogIHN0cm9rZTogbm9uZTsKICBjdXJzb3I6IG1vdmU7Cn0KCi5udmQzIC5udi1icnVzaCAuZXh0ZW50IHsKICBmaWxsLW9wYWNpdHk6IDAgIWltcG9ydGFudDsKfQoKLm52ZDMgLm52LWJydXNoQmFja2dyb3VuZCByZWN0IHsKICBzdHJva2U6ICMwMDA7CiAgc3Ryb2tlLXdpZHRoOiAuNDsKICBmaWxsOiAjZmZmOwogIGZpbGwtb3BhY2l0eTogLjc7Cn0KCgovKioqKioqKioqKgoqIFBhcmFsbGVsIENvb3JkaW5hdGVzCiovCgoubnZkMyAuYmFja2dyb3VuZCBwYXRoIHsKICBmaWxsOiBub25lOwogIHN0cm9rZTogI0VFRTsKICBzdHJva2Utb3BhY2l0eTogLjQ7CiAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgoubnZkMyAuZm9yZWdyb3VuZCBwYXRoIHsKICBmaWxsOiBub25lOwogIHN0cm9rZS1vcGFjaXR5OiAuNzsKfQoKLm52ZDMgLmJydXNoIC5leHRlbnQgewogIGZpbGwtb3BhY2l0eTogLjM7CiAgc3Ryb2tlOiAjZmZmOwogIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKfQoKLm52ZDMgLmF4aXMgbGluZSwgLmF4aXMgcGF0aCB7CiAgZmlsbDogbm9uZTsKICBzdHJva2U6ICMwMDA7CiAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgoubnZkMyAuYXhpcyB0ZXh0IHsKICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjZmZmOwp9CgovKioqKgpJbnRlcmFjdGl2ZSBMYXllcgoqLwoubnZkMyAubnYtaW50ZXJhY3RpdmVHdWlkZUxpbmUgewogIHBvaW50ZXItZXZlbnRzOm5vbmU7Cn0KLm52ZDMgbGluZS5udi1ndWlkZWxpbmUgewogIHN0cm9rZTogI2NjYzsKfQo=</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/img/Location.svg" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wYmV0YTEgKDMyZDQ4MTIsIDIwMTktMDktMTkpIgogICBzb2RpcG9kaTpkb2NuYW1lPSJMb2NhdGlvbi5zdmciCiAgIHdpZHRoPSI4MiIKICAgaGVpZ2h0PSIxMjIiCiAgIHZpZXdCb3g9IjAgMCAyMS42OTU4MzMgMzIuMjc5MTY3IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4Ij4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTpjeT0iOTguOTgwODU0IgogICAgIGlua3NjYXBlOmN4PSI1Mi4wNzMxOTIiCiAgICAgaW5rc2NhcGU6em9vbT0iMi42MDAyNTY1IgogICAgIHVuaXRzPSJweCIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaWQ9Im5hbWVkdmlldzgzOSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI5MDciCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxNjAwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC1yb3RhdGlvbj0iMCIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczIiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtODEuNzU2MjQ4LC0xMjQuMDg5NTkpIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDgzNSIKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQiCiAgICAgICBkPSJtIDEwMy4xODc1LDEzNC45Mzc1IGMgMCwxLjQ2MTI1IC0wLjI5NjE1LDIuODUzMzQgLTAuODMxNjksNC4xMTk1MSAtMS43NDYyMiwzLjk1MTEzIC05Ljc1MTY0MywxNy4wNDcxNiAtOS43NTE2NDMsMTcuMDQ3MTYgMCwwIC04LjA0MDkwNywtMTMuMDg1MTcgLTkuNzUxNjQ0LC0xNy4wNDcxNiAtMC41MzU1NDYsLTEuMjY2MTcgLTAuODMxNjkyLC0yLjY1ODI2IC0wLjgzMTY5MiwtNC4xMTk1MSAtMmUtNiwtNS44NDUwMSA0LjczODMyMSwtMTAuNTgzMzMgMTAuNTgzMzMzLC0xMC41ODMzMyA1Ljg0NTAxMywwIDEwLjU4MzMzNiw0LjczODMyIDEwLjU4MzMzNiwxMC41ODMzMyB6IiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDgzOCIKICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQiCiAgICAgICBkPSJtIDk2LjU3MjkxNywxMzQuOTM3NSBhIDMuOTY4NzUsMy45Njg3NSAwIDAgMSAtMy45Njg3NSwzLjk2ODc1IDMuOTY4NzUsMy45Njg3NSAwIDAgMSAtMy45Njg3NSwtMy45Njg3NSAzLjk2ODc1LDMuOTY4NzUgMCAwIDEgMy45Njg3NSwtMy45Njg3NSAzLjk2ODc1LDMuOTY4NzUgMCAwIDEgMy45Njg3NSwzLjk2ODc1IHoiIC8+CiAgPC9nPgo8L3N2Zz4K</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/img/LocationRed.svg" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgaWQ9InN2ZzgiCiAgIHZlcnNpb249IjEuMSIKICAgdmlld0JveD0iMCAwIDIxLjY5NTgzMyAzMi4yNzkxNjciCiAgIGhlaWdodD0iMTIyIgogICB3aWR0aD0iODIiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkxvY2F0aW9uUmVkLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wYmV0YTEgKDMyZDQ4MTIsIDIwMTktMDktMTkpIj4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXJvdGF0aW9uPSIwIgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE2MDAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iOTA3IgogICAgIGlkPSJuYW1lZHZpZXc4MzkiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIHVuaXRzPSJweCIKICAgICBpbmtzY2FwZTp6b29tPSIyLjI5NDYwODMiCiAgICAgaW5rc2NhcGU6Y3g9IjExMi44NDY0IgogICAgIGlua3NjYXBlOmN5PSI2Mi4wMjQyNzIiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI1IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnOCIgLz4KICA8ZGVmcwogICAgIGlkPSJkZWZzMiIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE1Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIHN0eWxlPSJmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybyIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04MS43NTYyNDgsLTEyNC4wODk1OSkiPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTAzLjE4NzUsMTM0LjkzNzUgYyAwLDEuNDYxMjUgLTAuMjk2MTUsMi44NTMzNCAtMC44MzE2OSw0LjExOTUxIC0xLjc0NjIyLDMuOTUxMTMgLTkuNzUxNjQzLDE3LjA0NzE2IC05Ljc1MTY0MywxNy4wNDcxNiAwLDAgLTguMDQwOTA3LC0xMy4wODUxNyAtOS43NTE2NDQsLTE3LjA0NzE2IC0wLjUzNTU0NiwtMS4yNjYxNyAtMC44MzE2OTIsLTIuNjU4MjYgLTAuODMxNjkyLC00LjExOTUxIC0yZS02LC01Ljg0NTAxIDQuNzM4MzIxLC0xMC41ODMzMyAxMC41ODMzMzMsLTEwLjU4MzMzIDUuODQ1MDEzLDAgMTAuNTgzMzM2LDQuNzM4MzIgMTAuNTgzMzM2LDEwLjU4MzMzIHoiCiAgICAgICBzdHlsZT0iZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlLW9wYWNpdHk6MTtmaWxsOiNkYzAwMDAiCiAgICAgICBpZD0icGF0aDgzNSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA5Ni41NzI5MTcsMTM0LjkzNzUgYSAzLjk2ODc1LDMuOTY4NzUgMCAwIDEgLTMuOTY4NzUsMy45Njg3NSAzLjk2ODc1LDMuOTY4NzUgMCAwIDEgLTMuOTY4NzUsLTMuOTY4NzUgMy45Njg3NSwzLjk2ODc1IDAgMCAxIDMuOTY4NzUsLTMuOTY4NzUgMy45Njg3NSwzLjk2ODc1IDAgMCAxIDMuOTY4NzUsMy45Njg3NSB6IgogICAgICAgc3R5bGU9ImZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6I2ZmZmZmZiIKICAgICAgIGlkPSJwYXRoODM4IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICA8L2c+Cjwvc3ZnPgo=</File>
        <File Location="var/httpd/htdocs/skins/Customer/default/css/Core.OpenStreetMap.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi8qIEN1c3RvbWVyIERhc2hib2FyZCAqLwoub29vVGlsZV9PU01DYW52YXMgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKI29wZW5zdHJlZXRtYXAtY2FudmFzIHsKICAgIGhlaWdodDogMTAwJTsKICAgIHdpZHRoOiAxMDAlOwogICAgbWFyZ2luOiAwOwp9CgovKiBDdXN0b21lck9wZW5TdHJlZXRNYXAgKi8KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkgewogICAgLk9TTSA+ICNvb29IZWFkZXIsCiAgICAuT1NNID4gI29vb0N1c3RvbWVyTm90aWZpY2F0aW9ucyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuT1NNID4gI29vb01haW5Cb3ggewogICAgICAgIGhlaWdodDogY2FsYyggMTAwdmggLSAxMDRweCApOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICB9Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsKICAgIC5PU00gPiAjb29vSGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IDE0NXB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDEuMnB4IHNvbGlkICNlNWU1ZWI7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CgogICAgLk9TTSA+ICNvb29NYWluQm94IHsKICAgICAgICBoZWlnaHQ6IGNhbGMoIDEwMHZoIC0gMTk0LjJweCApOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgLk9TTSNvb29Db250ZW50IHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgfQoKICAgIC5PU00gPiAjb29vQ3VzdG9tZXJOb3RpZmljYXRpb25zIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgIH0KCiAgICAuT1NNICNvcGVuc3RyZWV0bWFwLWNhbnZhcyAubGVhZmxldC1sZWZ0IHsKICAgICAgICBsZWZ0OiA1NnB4OwogICAgfQp9Cg==</File>
        <File Location="var/httpd/htdocs/skins/Customer/default/img/map.svg" Permission="660" Encode="Base64">PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQuNjUgNC45OGwtNS0xLjc1Yy0uNDItLjE1LS44OC0uMTUtMS4zLS4wMUw0LjM2IDQuNTZDMy41NSA0Ljg0IDMgNS42IDMgNi40NnYxMS44NWMwIDEuNDEgMS40MSAyLjM3IDIuNzIgMS44NmwyLjkzLTEuMTRjLjIyLS4wOS40Ny0uMDkuNjktLjAxbDUgMS43NWMuNDIuMTUuODguMTUgMS4zLjAxbDMuOTktMS4zNGMuODEtLjI3IDEuMzYtMS4wNCAxLjM2LTEuOVY1LjY5YzAtMS40MS0xLjQxLTIuMzctMi43Mi0xLjg2bC0yLjkzIDEuMTRjLS4yMi4wOC0uNDYuMDktLjY5LjAxek0xNSAxOC44OWwtNi0yLjExVjUuMTFsNiAyLjExdjExLjY3eiIvPjwvc3ZnPg==</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/img/Location.png" Permission="660" Encode="Base64">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</File>
        <File Location="doc/en/OpenStreetMap.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
</otrs_package>