<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>LightAdmin-AutoRepliesAndSignatures</Name>
    <Version>11.0.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-10-01 09:08:27" Version="11.0.2">Provide a small documentation.</ChangeLog>
    <ChangeLog Date="2026-09-21 15:57:26" Version="11.0.1">Initial Release.</ChangeLog>
    <Description Lang="en">Enable the LightAdmin capability for the Signature and Auto Response features</Description>
    <Framework>11.0.x</Framework>
    <BuildCommitID>0e25d6a5504911e0dd56dfd82fa00ac6e033870d</BuildCommitID>
    <BuildDate>2026-10-01 09:08:31</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Modules/AdminAutoResponse.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL01vZHVsZXMvQWRtaW5BdXRvUmVzcG9uc2UucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluQXV0b1Jlc3BvbnNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBzZXQgcHJlZiBmb3IgY29sdW1ucyBrZXkKICAgICRTZWxmLT57UHJlZktleUluY2x1ZGVJbnZhbGlkfSA9ICdJbmNsdWRlSW52YWxpZCcgLiAnLScgLiAkU2VsZi0+e0FjdGlvbn07CgogICAgbXkgJVByZWZlcmVuY2VzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0UHJlZmVyZW5jZXMoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPSAkUHJlZmVyZW5jZXN7ICRTZWxmLT57UHJlZktleUluY2x1ZGVJbnZhbGlkfSB9OwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwogICAgaWYgKCAhJFBhcmFte0FjY2Vzc1J3fSAmJiAkUGFyYW17QWNjZXNzUm99ICkgewogICAgICAgICRTZWxmLT57TGlnaHRBZG1pbn0gPSAxOwogICAgfQojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRBdXRvUmVzcG9uc2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0b1Jlc3BvbnNlJyk7CiAgICBteSAkUXVldWVPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CgogICAgJFBhcmFte0luY2x1ZGVJbnZhbGlkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJbmNsdWRlSW52YWxpZCcgKTsKCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte0luY2x1ZGVJbnZhbGlkfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgS2V5ICAgID0+ICRTZWxmLT57UHJlZktleUluY2x1ZGVJbnZhbGlkfSwKICAgICAgICAgICAgVmFsdWUgID0+ICRQYXJhbXtJbmNsdWRlSW52YWxpZH0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPSAkUGFyYW17SW5jbHVkZUludmFsaWR9OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY2hhbmdlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlJyApIHsKICAgICAgICBteSAkSUQgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKSB8fCAnJzsKICAgICAgICBteSAlRGF0YSA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUdldCgKICAgICAgICAgICAgSUQgPT4gJElELAogICAgICAgICk7CgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlQXV0b1Jlc3BvbnNlTWVtYmVyTGlzdCggQXV0b1Jlc3BvbnNlSUQgPT4gJElEICk7CiAgICAgICAgICAgICREYXRhe1Blcm1pc3Npb259ID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgUXVldWVJRHMgPT4gWyBrZXlzICVRdWV1ZXMgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIERlZmF1bHQgID0+ICdydycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIE5vIHBlcm1pc3Npb24gZm9yIHRoZSB0ZW1wbGF0ZS4KICAgICAgICAgICAgaWYgKCAhJERhdGF7UGVybWlzc2lvbn0gKSB7CiAgICAgICAgICAgICAgICAlRGF0YSA9ICgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJERhdGF7UGVybWlzc2lvbn0gZXEgJ3JvJyApIHsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdOb3RpY2UnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTm8gcGVybWlzc2lvbiB0byBlZGl0IHRoaXMgYXV0byByZXNwb25zZS4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQ2hhbmdlJywKICAgICAgICAgICAgJURhdGEsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkF1dG9SZXNwb25zZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNoYW5nZSBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDaGFuZ2VBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICBteSAoICVHZXRQYXJhbSwgJUVycm9ycyApOwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhJRCBOYW1lIENvbW1lbnQgVmFsaWRJRCBSZXNwb25zZSBTdWJqZWN0IFR5cGVJRCBBZGRyZXNzSUQpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGNvbXBvc2VkIGNvbnRlbnQgdHlwZQogICAgICAgICRHZXRQYXJhbXtDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgJEdldFBhcmFte0NvbnRlbnRUeXBlfSA9ICd0ZXh0L2h0bWwnOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY2hhcnNldAogICAgICAgICRHZXRQYXJhbXtDaGFyc2V0fSA9ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH07CgogICAgICAgICMgY2hlY2sgbmVlZGVkIGRhdGEKICAgICAgICBmb3IgbXkgJE5lZWRlZCAocXcoTmFtZSBWYWxpZElEIEFkZHJlc3NJRCBUeXBlSUQgU3ViamVjdCkpIHsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yc3sgJE5lZWRlZCAuICdJbnZhbGlkJyB9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgIH0KIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlQXV0b1Jlc3BvbnNlTWVtYmVyTGlzdCggQXV0b1Jlc3BvbnNlSUQgPT4gJEdldFBhcmFte0lEfSApOwogICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBObyBwZXJtaXNzaW9uIHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUuCiAgICAgICAgICAgIGlmICggJFBlcm1pc3Npb24gbmUgJ3J3JyApIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7Tm9QZXJtaXNzaW9ufSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKCiAgICAgICAgIyBpZiBubyBlcnJvcnMgb2NjdXJyZWQKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyB1cGRhdGUgYXV0byByZXNwb25zZQogICAgICAgICAgICBteSAkVXBkYXRlID0gJEF1dG9SZXNwb25zZU9iamVjdC0+QXV0b1Jlc3BvbnNlVXBkYXRlKCAlR2V0UGFyYW0sIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0gKTsKCiAgICAgICAgICAgIGlmICgkVXBkYXRlKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBpZiB0aGUgdXNlciB3b3VsZCBsaWtlIHRvIGNvbnRpbnVlIGVkaXRpbmcgdGhlIGF1dG8gcmVzcG9uc2UsIGp1c3QgcmVkaXJlY3QgdG8gdGhlIGVkaXQgc2NyZWVuCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkKICAgICAgICAgICAgICAgICAgICAmJiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb250aW51ZUFmdGVyU2F2ZScgKSBlcSAnMScgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249Q2hhbmdlO0lEPSRJRCIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSByZXR1cm4gdG8gb3ZlcnZpZXcKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggUHJpb3JpdHkgPT4gJ0Vycm9yJyApOwogICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgQWN0aW9uID0+ICdDaGFuZ2UnLAogICAgICAgICAgICBFcnJvcnMgPT4gXCVFcnJvcnMsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluQXV0b1Jlc3BvbnNlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYWRkCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkJyApIHsKICAgICAgICBteSAlR2V0UGFyYW07CiAgICAgICAgJEdldFBhcmFte05hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ05hbWUnICk7CiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgQWN0aW9uID0+ICdBZGQnLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkF1dG9SZXNwb25zZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFkZCBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGRBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICBteSAoICVHZXRQYXJhbSwgJUVycm9ycyApOwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhJRCBOYW1lIENvbW1lbnQgVmFsaWRJRCBSZXNwb25zZSBTdWJqZWN0IFR5cGVJRCBBZGRyZXNzSUQpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGNvbXBvc2VkIGNvbnRlbnQgdHlwZQogICAgICAgICRHZXRQYXJhbXtDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgJEdldFBhcmFte0NvbnRlbnRUeXBlfSA9ICd0ZXh0L2h0bWwnOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY2hhcnNldAogICAgICAgICRHZXRQYXJhbXtDaGFyc2V0fSA9ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH07CgogICAgICAgICMgY2hlY2sgbmVlZGVkIGRhdGEKICAgICAgICBmb3IgbXkgJE5lZWRlZCAocXcoTmFtZSBWYWxpZElEIEFkZHJlc3NJRCBUeXBlSUQgU3ViamVjdCkpIHsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yc3sgJE5lZWRlZCAuICdJbnZhbGlkJyB9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBpZiBubyBlcnJvcnMgb2NjdXJyZWQKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyBhZGQgc3RhdGUKICAgICAgICAgICAgbXkgJEF1dG9SZXNwb25zZUlEID0gJEF1dG9SZXNwb25zZU9iamVjdC0+QXV0b1Jlc3BvbnNlQWRkKAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfQogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoJEF1dG9SZXNwb25zZUlEKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+IFRyYW5zbGF0YWJsZSgnQXV0byBSZXNwb25zZSBhZGRlZCEnKSApOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkF1dG9SZXNwb25zZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggUHJpb3JpdHkgPT4gJ0Vycm9yJyApOwogICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgQWN0aW9uID0+ICdBZGQnLAogICAgICAgICAgICBFcnJvcnMgPT4gXCVFcnJvcnMsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluQXV0b1Jlc3BvbnNlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPl9PdmVydmlldygpOwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkF1dG9SZXNwb25zZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9FZGl0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRBdXRvUmVzcG9uc2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0b1Jlc3BvbnNlJyk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAkUGFyYW17VmFsaWRPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIFZhbGlkYXRlX1JlcXVpcmVkICcgLiAoICRQYXJhbXtFcnJvcnN9LT57J1ZhbGlkSURJbnZhbGlkJ30gfHwgJycgKSwKICAgICk7CgogICAgJFBhcmFte1R5cGVPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiB7ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZVR5cGVMaXN0KCksIH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnVHlwZUlEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtUeXBlSUR9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZSBWYWxpZGF0ZV9SZXF1aXJlZCAnIC4gKCAkUGFyYW17RXJyb3JzfS0+eydUeXBlSURJbnZhbGlkJ30gfHwgJycgKSwKICAgICk7CgogICAgJFBhcmFte1N5c3RlbUFkZHJlc3NPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgPT4geyAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcycpLT5TeXN0ZW1BZGRyZXNzTGlzdCggVmFsaWQgPT4gMSApLCB9LAogICAgICAgIE5hbWUgICAgICAgID0+ICdBZGRyZXNzSUQnLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtBZGRyZXNzSUR9LAogICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZSBWYWxpZGF0ZV9SZXF1aXJlZCAnIC4gKCAkUGFyYW17RXJyb3JzfS0+eydBZGRyZXNzSURJbnZhbGlkJ30gfHwgJycgKSwKICAgICk7CgogICAgbXkgJEhUTUxVdGlsc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKTsKCiAgICAjIGFkZCByaWNoIHRleHQgZWRpdG9yCiAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewoKICAgICAgICAjIHJlZm9ybWF0IGZyb20gcGxhaW4gdG8gaHRtbAogICAgICAgIGlmICggJFBhcmFte0NvbnRlbnRUeXBlfSAmJiAkUGFyYW17Q29udGVudFR5cGV9ID1+IC90ZXh0XC9wbGFpbi9pICkgewogICAgICAgICAgICAkUGFyYW17UmVzcG9uc2V9ID0gJEhUTUxVdGlsc09iamVjdC0+VG9IVE1MKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtSZXNwb25zZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgcmVmb3JtYXQgZnJvbSBodG1sIHRvIHBsYWluCiAgICAgICAgaWYgKCAkUGFyYW17Q29udGVudFR5cGV9ICYmICRQYXJhbXtDb250ZW50VHlwZX0gPX4gL3RleHRcL2h0bWwvaSApIHsKICAgICAgICAgICAgJFBhcmFte1Jlc3BvbnNlfSA9ICRIVE1MVXRpbHNPYmplY3QtPlRvQXNjaWkoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte1Jlc3BvbnNlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdVcGRhdGUnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7ICRQYXJhbXtFcnJvcnN9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKCiAgICAgICAgIyBzZXQgdXAgcmljaCB0ZXh0IGVkaXRvcgogICAgICAgICRMYXlvdXRPYmplY3QtPlNldFJpY2hUZXh0UGFyYW1ldGVycygKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfT3ZlcnZpZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwogICAgbXkgJFF1ZXVlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uQWRkJyApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnSW5jbHVkZUludmFsaWQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBJbmNsdWRlSW52YWxpZCAgICAgICAgPT4gJFNlbGYtPntJbmNsdWRlSW52YWxpZH0sCiAgICAgICAgICAgIEluY2x1ZGVJbnZhbGlkQ2hlY2tlZCA9PiAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSA/ICdjaGVja2VkJyA6ICcnLAogICAgICAgIH0sCiAgICApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0ZpbHRlcicgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdCcsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgIG15ICRBdXRvUmVzcG9uc2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0b1Jlc3BvbnNlJyk7CiAgICBteSAlTGlzdCA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUxpc3QoCiAgICAgICAgVmFsaWQgPT4gJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPyAwIDogMSwKICAgICk7CiAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CgogICAgICAgICMgY2hlY2sgcXVldWUgcGVybWlzc2lvbnMgb2YgbGlua2VkIHRlbXBsYXRlcy4KICAgICAgICBmb3IgbXkgJExpc3RLZXkgKCBrZXlzICVMaXN0ICkgewogICAgICAgICAgICBteSAlRGF0YSA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUdldCggSUQgPT4gJExpc3RLZXkgKTsKICAgICAgICAgICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVBdXRvUmVzcG9uc2VNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlSUQgPT4gJERhdGF7SUR9CiAgICAgICAgICAgICk7CiAgICAgICAgICAgICREYXRhe1Blcm1pc3Npb259ID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgUXVldWVJRHMgPT4gWyBrZXlzICVRdWV1ZXMgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIERlZmF1bHQgID0+ICdydycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICghJERhdGF7UGVybWlzc2lvbn0pIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkTGlzdHskTGlzdEtleX0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KIyBFTyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwoKICAgICMgaWYgdGhlcmUgYXJlIGFueSByZXN1bHRzLCB0aGV5IGFyZSBzaG93bgogICAgaWYgKCVMaXN0KSB7CgogICAgICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgICAgIGZvciBteSAkSUQgKCBzb3J0IHsgJExpc3R7JGF9IGNtcCAkTGlzdHskYn0gfSBrZXlzICVMaXN0ICkgewogICAgICAgICAgICBteSAlRGF0YSA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUdldCgKICAgICAgICAgICAgICAgIElEID0+ICRJRCwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWYWxpZCA9PiAkVmFsaWRMaXN0eyAkRGF0YXtWYWxpZElEfSB9LAogICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnRzID0+IGludCByYW5kIDUsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG90aGVyd2lzZSBhIG5vIGRhdGEgbWVzc2FnZSBpcyBkaXNwbGF5ZWQKICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybiAxOwp9CgoxOwo=</File>
        <File Location="Custom/Kernel/Modules/AdminQueueAutoResponse.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL01vZHVsZXMvQWRtaW5RdWV1ZUF1dG9SZXNwb25zZS5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5RdWV1ZUF1dG9SZXNwb25zZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwogICAgaWYgKCAhJFBhcmFte0FjY2Vzc1J3fSAmJiAkUGFyYW17QWNjZXNzUm99ICkgewogICAgICAgICRTZWxmLT57TGlnaHRBZG1pbn0gPSAxOwogICAgfQojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJE91dHB1dCAgICAgID0gJyc7CiAgICAkUGFyYW17SUR9ICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKSB8fCAnJzsKICAgICRQYXJhbXtBY3Rpb259ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0FjdGlvbicgKQogICAgICAgIHx8ICdBZG1pblF1ZXVlQXV0b1Jlc3BvbnNlJzsKICAgICRQYXJhbXtGaWx0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKSB8fCAnJzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFF1ZXVlT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwogICAgbXkgJEF1dG9SZXNwb25zZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRvUmVzcG9uc2UnKTsKCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlJyApIHsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGdldCBUeXBlIEF1dG8gUmVzcG9uc2VzIGRhdGEKICAgICAgICBteSAlVHlwZVJlc3BvbnNlc0RhdGEgPSAkQXV0b1Jlc3BvbnNlT2JqZWN0LT5BdXRvUmVzcG9uc2VUeXBlTGlzdCgpOwoKICAgICAgICAjIGdldCBxdWV1ZSBkYXRhCiAgICAgICAgbXkgJVF1ZXVlRGF0YSA9ICRRdWV1ZU9iamVjdC0+UXVldWVHZXQoCiAgICAgICAgICAgIElEID0+ICRQYXJhbXtJRH0sCiAgICAgICAgKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgICRRdWV1ZURhdGF7UGVybWlzc2lvbn0gPSAkUXVldWVPYmplY3QtPlF1ZXVlTGlzdFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiBbICRQYXJhbXtJRH0gXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgTm8gcGVybWlzc2lvbiBmb3IgdGhlIHF1ZXVlLgogICAgICAgICAgICBpZiAoICEkUXVldWVEYXRhe1Blcm1pc3Npb259ICkgewogICAgICAgICAgICAgICAgJVF1ZXVlRGF0YSA9ICgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFF1ZXVlRGF0YXtQZXJtaXNzaW9ufSBlcSAncm8nICkgewogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ05vdGljZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdObyBwZXJtaXNzaW9uIHRvIGVkaXQgYXV0byByZXNwb25zZXMgZm9yIHRoaXMgcXVldWUuJyksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgU3ViYWN0aW9uID0+ICRTZWxmLT57U3ViYWN0aW9ufSwKICAgICAgICAgICAgICAgIFF1ZXVlTmFtZSA9PiAkUXVldWVEYXRhe05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JyApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkUXVldWVEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgJVF1ZXVlRGF0YSwKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIEFjdGlvbkhvbWUgPT4gJ0FkbWluUXVldWUnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgZm9yIG15ICRUeXBlSUQgKCBzb3J0IGtleXMgJVR5cGVSZXNwb25zZXNEYXRhICkgewoKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKIyAgICAgICAgICAgICMgZ2V0IGFsbCB2YWxpZCBBdXRvIFJlc3BvbnNlcyBkYXRhIGZvciBhcHByb3ByaWF0ZSBBdXRvIFJlc3BvbnNlcyB0eXBlCiMgICAgICAgICAgICBteSAlQXV0b1Jlc3BvbnNlTGlzdEJ5VHlwZSA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUxpc3QoCiMgICAgICAgICAgICAgICAgVHlwZUlEID0+ICRUeXBlSUQsCiMgICAgICAgICAgICApOwojCiMgICAgICAgICAgICAjIGdldCBzZWxlY3RlZCBBdXRvIFJlc3BvbnNlcyBmb3IgYXBwcm9wcmlhdGUgQXV0byBSZXNwb25zZXMgdHlwZSBhbmQgUXVldWUKIyAgICAgICAgICAgIG15ICVBdXRvUmVzcG9uc2VEYXRhID0gJEF1dG9SZXNwb25zZU9iamVjdC0+QXV0b1Jlc3BvbnNlR2V0QnlUeXBlUXVldWVJRCgKIyAgICAgICAgICAgICAgICBRdWV1ZUlEID0+ICRQYXJhbXtJRH0sCiMgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAkVHlwZVJlc3BvbnNlc0RhdGF7JFR5cGVJRH0sCiMgICAgICAgICAgICApOwojCiMgICAgICAgICAgICAkUGFyYW17RGF0YVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiMgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICJJRHNfJFR5cGVJRCIsCiMgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRBdXRvUmVzcG9uc2VEYXRhe0F1dG9SZXNwb25zZUlEfSB8fCAnJywKIyAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVBdXRvUmVzcG9uc2VMaXN0QnlUeXBlLAojICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiAxLAojICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAojICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIFc1MHBjJywKIyAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICglUXVldWVEYXRhKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgYWxsIHZhbGlkIEF1dG8gUmVzcG9uc2VzIGRhdGEgZm9yIGFwcHJvcHJpYXRlIEF1dG8gUmVzcG9uc2VzIHR5cGUKICAgICAgICAgICAgICAgIG15ICVBdXRvUmVzcG9uc2VMaXN0QnlUeXBlID0gJEF1dG9SZXNwb25zZU9iamVjdC0+QXV0b1Jlc3BvbnNlTGlzdCgKICAgICAgICAgICAgICAgICAgICBUeXBlSUQgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQXV0b1Jlc3BvbnNlSUQgKCBzb3J0IGtleXMgJUF1dG9SZXNwb25zZUxpc3RCeVR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVRdWV1ZXMgICAgID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUF1dG9SZXNwb25zZU1lbWJlckxpc3QoIEF1dG9SZXNwb25zZUlEID0+ICRBdXRvUmVzcG9uc2VJRCApOwogICAgICAgICAgICAgICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRQZXJtaXNzaW9uIG5lICdydycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJEF1dG9SZXNwb25zZUxpc3RCeVR5cGV7JEF1dG9SZXNwb25zZUlEfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgIyBnZXQgc2VsZWN0ZWQgQXV0byBSZXNwb25zZXMgZm9yIGFwcHJvcHJpYXRlIEF1dG8gUmVzcG9uc2VzIHR5cGUgYW5kIFF1ZXVlCiAgICAgICAgICAgICAgICBteSAlQXV0b1Jlc3BvbnNlRGF0YSA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUdldEJ5VHlwZVF1ZXVlSUQoCiAgICAgICAgICAgICAgICAgICAgUXVldWVJRCA9PiAkUGFyYW17SUR9LAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJFR5cGVSZXNwb25zZXNEYXRheyRUeXBlSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkUGFyYW17RGF0YVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICJJRHNfJFR5cGVJRCIsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRBdXRvUmVzcG9uc2VEYXRhe0F1dG9SZXNwb25zZUlEfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVBdXRvUmVzcG9uc2VMaXN0QnlUeXBlLAogICAgICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIFc1MHBjJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KIyBFTyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NoYW5nZUl0ZW1MaXN0JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgICA9PiAkVHlwZVJlc3BvbnNlc0RhdGF7JFR5cGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVHlwZUlEID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5RdWV1ZUF1dG9SZXNwb25zZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgIH0KCiAgICAjIHF1ZXVlcyB0byBxdWV1ZV9hdXRvX3Jlc3BvbnNlcwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NoYW5nZUFjdGlvbicgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15IEBOZXdJRHMgPSAoKTsKCiAgICAgICAgIyBnZXQgVHlwZSBBdXRvIFJlc3BvbnNlcyBkYXRhCiAgICAgICAgbXkgJVR5cGVSZXNwb25zZXNEYXRhID0gJEF1dG9SZXNwb25zZU9iamVjdC0+QXV0b1Jlc3BvbnNlVHlwZUxpc3QoKTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewoKICAgICAgICAgICAgIyBjaGVjayBpZiB1c2VyIGhhcyBydyBwZXJtaXNzaW9ucyBvbiB0aGUgUXVldWVJRAogICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsgJFBhcmFte0lEfSBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBubyBwZXJtaXNzaW9uIHRvIGNoYW5nZS4KICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1DaGFuZ2U7SUQ9JFBhcmFte0lEfSIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgaWYgdXNlciBoYXMgcGVybWlzc2lvbnMgb24gZXZlcnkgQXV0b1Jlc3BvbnNlSUQKICAgICAgICAgICAgQ0hFQ0tfQVVUT19SRVNQT05TRV9JRDoKICAgICAgICAgICAgZm9yIG15ICRUeXBlSUQgKCBzb3J0IGtleXMgJVR5cGVSZXNwb25zZXNEYXRhICkgewogICAgICAgICAgICAgICAgbXkgJFBhcmFtQXV0b1Jlc3BvbnNlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiSURzXyRUeXBlSUQiICk7CgogICAgICAgICAgICAgICAgbmV4dCBDSEVDS19BVVRPX1JFU1BPTlNFX0lEIGlmICEkUGFyYW1BdXRvUmVzcG9uc2VJRDsKICAgICAgICAgICAgICAgIG15ICVBdXRvUmVzcG9uc2VMaXN0QnlUeXBlID0gJEF1dG9SZXNwb25zZU9iamVjdC0+QXV0b1Jlc3BvbnNlTGlzdCggVHlwZUlEID0+ICRUeXBlSUQgKTsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJEF1dG9SZXNwb25zZUlEICgga2V5cyAlQXV0b1Jlc3BvbnNlTGlzdEJ5VHlwZSApIHsKICAgICAgICAgICAgICAgICAgICBteSAlUXVldWVzICAgICA9ICRRdWV1ZU9iamVjdC0+UXVldWVBdXRvUmVzcG9uc2VNZW1iZXJMaXN0KCBBdXRvUmVzcG9uc2VJRCA9PiAkQXV0b1Jlc3BvbnNlSUQgKTsKICAgICAgICAgICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWVJRHMgPT4gWyBrZXlzICVRdWV1ZXMgXSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJEF1dG9SZXNwb25zZUxpc3RCeVR5cGV7JEF1dG9SZXNwb25zZUlEfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBubyBwZXJtaXNzaW9uIHRvIGNoYW5nZS4KICAgICAgICAgICAgICAgIGlmICggISRBdXRvUmVzcG9uc2VMaXN0QnlUeXBleyAkUGFyYW1BdXRvUmVzcG9uc2VJRCB9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPUNoYW5nZTtJRD0kUGFyYW17SUR9IgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKCiAgICAgICAgIyBzZXQgQXV0byBSZXNwb25zZXMgSURzIGZvciB0aGlzIHF1ZXVlLgogICAgICAgIGZvciBteSAkVHlwZUlEICggc29ydCBrZXlzICVUeXBlUmVzcG9uc2VzRGF0YSApIHsKICAgICAgICAgICAgcHVzaCggQE5ld0lEcywgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gIklEc18kVHlwZUlEIiApICk7CiAgICAgICAgfQoKICAgICAgICAkQXV0b1Jlc3BvbnNlT2JqZWN0LT5BdXRvUmVzcG9uc2VRdWV1ZSgKICAgICAgICAgICAgUXVldWVJRCAgICAgICAgID0+ICRQYXJhbXtJRH0sCiAgICAgICAgICAgIEF1dG9SZXNwb25zZUlEcyA9PiBcQE5ld0lEcywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGlmIHRoZSB1c2VyIHdvdWxkIGxpa2UgdG8gY29udGludWUgZWRpdGluZyB0aGUgcXVldWUgLSBhdXRvIHJlc3BvbnNlIHJlbGF0aW9uLCBqdXN0IHJlZGlyZWN0IHRvIHRoZSBlZGl0IHNjcmVlbgogICAgICAgICMgb3RoZXJ3aXNlIHJldHVybiB0byBvdmVydmlldwogICAgICAgIGlmICgKICAgICAgICAgICAgZGVmaW5lZCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkKICAgICAgICAgICAgJiYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkgZXEgJzEnICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249Q2hhbmdlO0lEPSRQYXJhbXtJRH0iICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGVsc2UgISBwcmludCBmb3JtCiAgICBlbHNlIHsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGdldCBxdWV1ZSBkYXRhCiAgICAgICAgbXkgJVF1ZXVlRGF0YTsKICAgICAgICBteSAkUXVldWVIZWFkZXI7CgogICAgICAgICMgZmlsdGVyIHF1ZXVlcyB3aXRob3V0IGF1dG8gcmVzcG9uc2VzCiAgICAgICAgaWYgKCAkUGFyYW17RmlsdGVyfSBlcSAnUXVldWVzV2l0aG91dEF1dG9SZXNwb25zZXMnICkgewoKICAgICAgICAgICAgJVF1ZXVlRGF0YSA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZVdpdGhvdXRRdWV1ZSgpOwoKICAgICAgICAgICAgIyB1c2UgYXBwcm9wcmlhdGUgaGVhZGVyCiAgICAgICAgICAgICRRdWV1ZUhlYWRlciA9IFRyYW5zbGF0YWJsZSgnUXVldWVzICggd2l0aG91dCBhdXRvIHJlc3BvbnNlcyApJyk7CgogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJVF1ZXVlRGF0YSAgID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3QoIFZhbGlkID0+IDEgKTsKICAgICAgICAgICAgJFF1ZXVlSGVhZGVyID0gVHJhbnNsYXRhYmxlKCdRdWV1ZXMnKTsKICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4geyAlUXVldWVEYXRhLCAlUGFyYW0sIH0KICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnRmlsdGVyUXVldWVzJyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdGaWx0ZXJBdXRvUmVzcG9uc2VzJyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwoKICAgICAgICBpZiAoICRQYXJhbXtGaWx0ZXJ9IGVxICdRdWV1ZXNXaXRob3V0QXV0b1Jlc3BvbnNlcycgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdTaG93QWxsUXVldWVzJyApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ1F1ZXVlc1dpdGhvdXRBdXRvUmVzcG9uc2VzJyApOwogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3UmVzdWx0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBRdWV1ZUhlYWRlciA9PiAkUXVldWVIZWFkZXIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CgogICAgICAgICAgICAjIEZpbHRlciBvdXQgcXVldWVzIHdpdGhvdXQgcGVybWlzc2lvbi4KICAgICAgICAgICAgbXkgJVJ3UXVldWVzID0gJFF1ZXVlT2JqZWN0LT5HZXRBbGxRdWV1ZXMoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBmb3IgbXkgJFF1ZXVlSUQgKCBrZXlzICVRdWV1ZURhdGEgKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgJFF1ZXVlRGF0YXskUXVldWVJRH0gaWYgISRSd1F1ZXVlc3skUXVldWVJRH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKCiAgICAgICAgIyBpZiB0aGVyZSBhcmUgYW55IHF1ZXVlcywgdGhleSBhcmUgc2hvd24KICAgICAgICBpZiAoJVF1ZXVlRGF0YSkgewogICAgICAgICAgICBmb3IgKCBzb3J0IHsgJFF1ZXVlRGF0YXskYX0gY21wICRRdWV1ZURhdGF7JGJ9IH0ga2V5cyAlUXVldWVEYXRhICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSXRlbScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlICAgPT4gJFF1ZXVlRGF0YXskX30sCiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlSUQgPT4gJF8sCiAgICAgICAgICAgICAgICAgICAgICAgICVRdWV1ZURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9RdWV1ZXNGb3VuZE1zZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdmFsaWQgQXV0byBSZXNwb25zZSBJRHMKICAgICAgICBteSAlQXV0b1Jlc3BvbnNlTGlzdCA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUxpc3QoKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgIGZvciBteSAkQXV0b1Jlc3BvbnNlSUQgKCBzb3J0IGtleXMgJUF1dG9SZXNwb25zZUxpc3QgKSB7CiAgICAgICAgICAgICAgICBteSAlUXVldWVzICAgICA9ICRRdWV1ZU9iamVjdC0+UXVldWVBdXRvUmVzcG9uc2VNZW1iZXJMaXN0KCBBdXRvUmVzcG9uc2VJRCA9PiAkQXV0b1Jlc3BvbnNlSUQgKTsKICAgICAgICAgICAgICAgIG15ICRQZXJtaXNzaW9uID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIERlZmF1bHQgID0+ICdydycsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkQXV0b1Jlc3BvbnNlTGlzdHskQXV0b1Jlc3BvbnNlSUR9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCgogICAgICAgICMgaWYgdGhlcmUgYXJlIGFueSBhdXRvIHJlc3BvbnNlcywgdGhleSBhcmUgc2hvd24KICAgICAgICBpZiAoIGtleXMgJUF1dG9SZXNwb25zZUxpc3QgKSB7CiAgICAgICAgICAgIGZvciBteSAkQXV0b1Jlc3BvbnNlSUQgKCBzb3J0IGtleXMgJUF1dG9SZXNwb25zZUxpc3QgKSB7CgogICAgICAgICAgICAgICAgbXkgJURhdGEgPSAkQXV0b1Jlc3BvbnNlT2JqZWN0LT5BdXRvUmVzcG9uc2VHZXQoCiAgICAgICAgICAgICAgICAgICAgSUQgPT4gJEF1dG9SZXNwb25zZUlELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAlUmVzcG9uc2VEYXRhSXRlbSA9ICgKICAgICAgICAgICAgICAgICAgICBJRCAgID0+ICREYXRhe0lEfSwKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICREYXRhe1R5cGV9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJERhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0l0ZW1MaXN0JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IFwlUmVzcG9uc2VEYXRhSXRlbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlIGlzIGRpc3BsYXllZAogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ05vQXV0b1Jlc3BvbnNlc0ZvdW5kTXNnJywKICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblF1ZXVlQXV0b1Jlc3BvbnNlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgfQogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==</File>
        <File Location="Custom/Kernel/Modules/AdminSignature.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL01vZHVsZXMvQWRtaW5TaWduYXR1cmUucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluU2lnbmF0dXJlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBzZXQgcHJlZiBmb3IgY29sdW1ucyBrZXkKICAgICRTZWxmLT57UHJlZktleUluY2x1ZGVJbnZhbGlkfSA9ICdJbmNsdWRlSW52YWxpZCcgLiAnLScgLiAkU2VsZi0+e0FjdGlvbn07CgogICAgbXkgJVByZWZlcmVuY2VzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0UHJlZmVyZW5jZXMoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPSAkUHJlZmVyZW5jZXN7ICRTZWxmLT57UHJlZktleUluY2x1ZGVJbnZhbGlkfSB9OwoKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgIGlmICggISRQYXJhbXtBY2Nlc3NSd30gJiYgJFBhcmFte0FjY2Vzc1JvfSApIHsKICAgICAgICAkU2VsZi0+e0xpZ2h0QWRtaW59ID0gMTsKICAgIH0KIyBFTyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRQYXJhbU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFNpZ25hdHVyZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTaWduYXR1cmUnKTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICBteSAkUXVldWVPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgIG15ICROb3RpZmljYXRpb24gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTm90aWZpY2F0aW9uJyApIHx8ICcnOwoKICAgICRQYXJhbXtJbmNsdWRlSW52YWxpZH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSW5jbHVkZUludmFsaWQnICk7CgogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtJbmNsdWRlSW52YWxpZH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+U2V0UHJlZmVyZW5jZXMoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIEtleSAgICA9PiAkU2VsZi0+e1ByZWZLZXlJbmNsdWRlSW52YWxpZH0sCiAgICAgICAgICAgIFZhbHVlICA9PiAkUGFyYW17SW5jbHVkZUludmFsaWR9LAogICAgICAgICk7CgogICAgICAgICRTZWxmLT57SW5jbHVkZUludmFsaWR9ID0gJFBhcmFte0luY2x1ZGVJbnZhbGlkfTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNoYW5nZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NoYW5nZScgKSB7CiAgICAgICAgbXkgJElEICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICkgfHwgJyc7CiAgICAgICAgbXkgJURhdGEgPSAkU2lnbmF0dXJlT2JqZWN0LT5TaWduYXR1cmVHZXQoCiAgICAgICAgICAgIElEID0+ICRJRCwKICAgICAgICApOwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU2lnbmF0dXJlTWVtYmVyTGlzdCgKICAgICAgICAgICAgICAgIFNpZ25hdHVyZUlEID0+ICRJRAogICAgICAgICAgICApOwogICAgICAgICAgICAkRGF0YXtQZXJtaXNzaW9ufSA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBObyBwZXJtaXNzaW9uIGZvciB0aGUgdGVtcGxhdGUuCiAgICAgICAgICAgIGlmICggISREYXRhe1Blcm1pc3Npb259ICkgewogICAgICAgICAgICAgICAgJURhdGEgPSAoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICREYXRhe1Blcm1pc3Npb259IGVxICdybycgKSB7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnTm90aWNlJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ05vIHBlcm1pc3Npb24gdG8gZWRpdCB0aGlzIHNpZ25hdHVyZS4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggSW5mbyA9PiBUcmFuc2xhdGFibGUoJ1NpZ25hdHVyZSB1cGRhdGVkIScpICkKICAgICAgICAgICAgaWYgKCAkTm90aWZpY2F0aW9uICYmICROb3RpZmljYXRpb24gZXEgJ1VwZGF0ZScgKTsKCiAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ0NoYW5nZScsCiAgICAgICAgICAgICVEYXRhLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TaWduYXR1cmUnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjaGFuZ2UgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgKCAlR2V0UGFyYW0sICVFcnJvcnMgKTsKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoSUQgTmFtZSBUZXh0IENvbW1lbnQgVmFsaWRJRCkpIHsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8ICcnOwogICAgICAgIH0KICAgICAgICAkR2V0UGFyYW17J1RleHQnfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oCiAgICAgICAgICAgIFBhcmFtID0+ICdUZXh0JywKICAgICAgICAgICAgUmF3ICAgPT4gMQogICAgICAgICkgfHwgJyc7CgogICAgICAgICMgZ2V0IGNvbnRlbnQgdHlwZQogICAgICAgIG15ICRDb250ZW50VHlwZSA9ICd0ZXh0L3BsYWluJzsKICAgICAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICAkQ29udGVudFR5cGUgPSAndGV4dC9odG1sJzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgbmVlZGVkIGRhdGEKICAgICAgICBmb3IgbXkgJE5lZWRlZCAocXcoTmFtZSBWYWxpZElEIFRleHQpKSB7CiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7ICROZWVkZWQgLiAnSW52YWxpZCcgfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewoKICAgICAgICAgICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVTaWduYXR1cmVNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgU2lnbmF0dXJlSUQgPT4gJEdldFBhcmFte0lEfQogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBObyBwZXJtaXNzaW9uIHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUuCiAgICAgICAgICAgIGlmICggJFBlcm1pc3Npb24gbmUgJ3J3JyApIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7Tm9QZXJtaXNzaW9ufSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKCiAgICAgICAgIyBpZiBubyBlcnJvcnMgb2NjdXJyZWQKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyB1cGRhdGUgc2lnbmF0dXJlCiAgICAgICAgICAgIG15ICRVcGRhdGUgPSAkU2lnbmF0dXJlT2JqZWN0LT5TaWduYXR1cmVVcGRhdGUoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAkQ29udGVudFR5cGUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkVXBkYXRlKSB7CgogICAgICAgICAgICAgICAgIyBpZiB0aGUgdXNlciB3b3VsZCBsaWtlIHRvIGNvbnRpbnVlIGVkaXRpbmcgdGhlIHNpZ25hdHVyZSwganVzdCByZWRpcmVjdCB0byB0aGUgZWRpdCBzY3JlZW4KICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICBkZWZpbmVkICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb250aW51ZUFmdGVyU2F2ZScgKQogICAgICAgICAgICAgICAgICAgICYmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApIGVxICcxJyApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKSB8fCAnJzsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1DaGFuZ2U7SUQ9JElEO05vdGlmaWNhdGlvbj1VcGRhdGUiCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSByZXR1cm4gdG8gb3ZlcnZpZXcKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O05vdGlmaWNhdGlvbj1VcGRhdGUiICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc29tZXRoaW5nIGhhcyBnb25lIHdyb25nCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwojICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggUHJpb3JpdHkgPT4gJ0Vycm9yJyApOwogICAgICAgIG15ICRFcnJvckluZm8gPSAkRXJyb3Jze05vUGVybWlzc2lvbn0gPwogICAgICAgICAgICAgICAgICAgICAgICAnTm8gcGVybWlzc2lvbiB0byB1cGRhdGUgdGhpcyBzaWduYXR1cmUuJyA6CiAgICAgICAgICAgICAgICAgICAgICAgICdUaGVyZSB3ZXJlIGVycm9ycywgY291bGQgbm90IHVwZGF0ZSB0aGlzIHNpZ25hdHVyZS4nOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICBJbmZvID0+ICRFcnJvckluZm8sCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicKICAgICAgICApOwojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ0NoYW5nZScsCiAgICAgICAgICAgIEVycm9ycyA9PiBcJUVycm9ycywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TaWduYXR1cmUnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGQnICkgewogICAgICAgIG15ICVHZXRQYXJhbSA9ICgpOwogICAgICAgICRHZXRQYXJhbXtOYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdOYW1lJyApOwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQWRkJywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TaWduYXR1cmUnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgKCAlR2V0UGFyYW0sICVFcnJvcnMgKTsKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoSUQgTmFtZSBDb21tZW50IFZhbGlkSUQpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKSB8fCAnJzsKICAgICAgICB9CiAgICAgICAgJEdldFBhcmFteydUZXh0J30gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKAogICAgICAgICAgICBQYXJhbSA9PiAnVGV4dCcsCiAgICAgICAgICAgIFJhdyAgID0+IDEKICAgICAgICApIHx8ICcnOwoKICAgICAgICAjIGdldCBjb250ZW50IHR5cGUKICAgICAgICBteSAkQ29udGVudFR5cGUgPSAndGV4dC9wbGFpbic7CiAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgJENvbnRlbnRUeXBlID0gJ3RleHQvaHRtbCc7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIG5lZWRlZCBkYXRhCiAgICAgICAgZm9yIG15ICROZWVkZWQgKHF3KE5hbWUgVmFsaWRJRCBUZXh0KSkgewogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3JzeyAkTmVlZGVkIC4gJ0ludmFsaWQnIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGlmIG5vIGVycm9ycyBvY2N1cnJlZAogICAgICAgIGlmICggISVFcnJvcnMgKSB7CgogICAgICAgICAgICAjIGFkZCBzaWduYXR1cmUKICAgICAgICAgICAgbXkgJE5ld1NpZ25hdHVyZSA9ICRTaWduYXR1cmVPYmplY3QtPlNpZ25hdHVyZUFkZCgKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICRDb250ZW50VHlwZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkTmV3U2lnbmF0dXJlKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+IFRyYW5zbGF0YWJsZSgnU2lnbmF0dXJlIGFkZGVkIScpICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU2lnbmF0dXJlJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc29tZXRoaW5nIGhhcyBnb25lIHdyb25nCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBQcmlvcml0eSA9PiAnRXJyb3InICk7CiAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ0FkZCcsCiAgICAgICAgICAgIEVycm9ycyA9PiBcJUVycm9ycywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TaWduYXR1cmUnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+IFRyYW5zbGF0YWJsZSgnU2lnbmF0dXJlIHVwZGF0ZWQhJykgKQogICAgICAgICAgICBpZiAoICROb3RpZmljYXRpb24gJiYgJE5vdGlmaWNhdGlvbiBlcSAnVXBkYXRlJyApOwoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblNpZ25hdHVyZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCn0KCnN1YiBfRWRpdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkSFRNTFV0aWxzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpOwoKICAgICMgYWRkIHJpY2ggdGV4dCBlZGl0b3IKICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CgogICAgICAgICMgc2V0IHVwIHJpY2ggdGV4dCBlZGl0b3IKICAgICAgICAkTGF5b3V0T2JqZWN0LT5TZXRSaWNoVGV4dFBhcmFtZXRlcnMoCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIHJlZm9ybWF0IGZyb20gcGxhaW4gdG8gaHRtbAogICAgICAgIGlmICggJFBhcmFte0NvbnRlbnRUeXBlfSAmJiAkUGFyYW17Q29udGVudFR5cGV9ID1+IC90ZXh0XC9wbGFpbi9pICkgewogICAgICAgICAgICAkUGFyYW17VGV4dH0gPSAkSFRNTFV0aWxzT2JqZWN0LT5Ub0hUTUwoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte1RleHR9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIHJlZm9ybWF0IGZyb20gaHRtbCB0byBwbGFpbgogICAgICAgIGlmICggJFBhcmFte0NvbnRlbnRUeXBlfSAmJiAkUGFyYW17Q29udGVudFR5cGV9ID1+IC90ZXh0XC9odG1sL2kgKSB7CiAgICAgICAgICAgICRQYXJhbXtUZXh0fSA9ICRIVE1MVXRpbHNPYmplY3QtPlRvQXNjaWkoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte1RleHR9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBY3Rpb25MaXN0JywKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnLAogICAgKTsKCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICRQYXJhbXtWYWxpZE9wdGlvbn0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlVmFsaWRMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1ZhbGlkSUR9IHx8ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUgVmFsaWRhdGVfUmVxdWlyZWQgJyAuICggJFBhcmFte0Vycm9yc30tPnsnVmFsaWRJREludmFsaWQnfSB8fCAnJyApLAogICAgKTsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3VXBkYXRlJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyAkUGFyYW17RXJyb3JzfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvd3MgaGVhZGVyCiAgICBpZiAoICRQYXJhbXtBY3Rpb259IGVxICdDaGFuZ2UnICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJFZGl0JyApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0hlYWRlckFkZCcgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9PdmVydmlldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICBteSAkUXVldWVPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBY3Rpb25MaXN0JywKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQWN0aW9uQWRkJywKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHQnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnSW5jbHVkZUludmFsaWQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBJbmNsdWRlSW52YWxpZCAgICAgICAgPT4gJFNlbGYtPntJbmNsdWRlSW52YWxpZH0sCiAgICAgICAgICAgIEluY2x1ZGVJbnZhbGlkQ2hlY2tlZCA9PiAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSA/ICdjaGVja2VkJyA6ICcnLAogICAgICAgIH0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0ZpbHRlcicsCiAgICApOwoKICAgIG15ICRTaWduYXR1cmVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2lnbmF0dXJlJyk7CiAgICBteSAlTGlzdCAgICAgICAgICAgID0gJFNpZ25hdHVyZU9iamVjdC0+U2lnbmF0dXJlTGlzdCgKICAgICAgICBWYWxpZCA9PiAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSA/IDAgOiAxLAogICAgKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKCiAgICAgICAgIyBjaGVjayBxdWV1ZSBwZXJtaXNzaW9ucyBvZiBsaW5rZWQgc2lnbmF0dXJlcy4KICAgICAgICBmb3IgbXkgJExpc3RLZXkgKCBrZXlzICVMaXN0ICkgewogICAgICAgICAgICBteSAlRGF0YSA9ICRTaWduYXR1cmVPYmplY3QtPlNpZ25hdHVyZUdldCggSUQgPT4gJExpc3RLZXkgKTsKICAgICAgICAgICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVTaWduYXR1cmVNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgU2lnbmF0dXJlSUQgPT4gJERhdGF7SUR9CiAgICAgICAgICAgICk7CiAgICAgICAgICAgICREYXRhe1Blcm1pc3Npb259ID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgUXVldWVJRHMgPT4gWyBrZXlzICVRdWV1ZXMgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIERlZmF1bHQgID0+ICdydycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICghJERhdGF7UGVybWlzc2lvbn0pIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkTGlzdHskTGlzdEtleX0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KIyBFTyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwoKICAgICMgaWYgdGhlcmUgYXJlIGFueSByZXN1bHRzLCB0aGV5IGFyZSBzaG93bgogICAgaWYgKCVMaXN0KSB7CgogICAgICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgICAgIGZvciBteSAkTGlzdEtleSAoIHNvcnQgeyAkTGlzdHskYX0gY21wICRMaXN0eyRifSB9IGtleXMgJUxpc3QgKSB7CgogICAgICAgICAgICBteSAlRGF0YSA9ICRTaWduYXR1cmVPYmplY3QtPlNpZ25hdHVyZUdldCggSUQgPT4gJExpc3RLZXkgKTsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWYWxpZCA9PiAkVmFsaWRMaXN0eyAkRGF0YXtWYWxpZElEfSB9LAogICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIG1lc3NhZ2UgaXMgZGlzcGxheWVkCiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKMTsK</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AdminAutoResponse.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkF1dG9SZXNwb25zZS50dAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIkF1dG8gUmVzcG9uc2UgTWFuYWdlbWVudCIpIHwgaHRtbCAlXTwvaDE+CgogICAgWyUgQnJlYWRjcnVtYlBhdGggPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gVHJhbnNsYXRlKCdBdXRvIFJlc3BvbnNlIE1hbmFnZW1lbnQnKSwKICAgICAgICAgICAgICAgIExpbmsgPT4gRW52KCJBY3Rpb24iKSwKICAgICAgICAgICAgfSwKICAgICAgICBdCiAgICAlXQoKICAgIFslIFNXSVRDSCBEYXRhLkFjdGlvbiAlXQogICAgICAgIFslIENBU0UgJ0FkZCcgJV0KICAgICAgICAgICAgWyUgQnJlYWRjcnVtYlBhdGgucHVzaCh7IE5hbWUgPT4gVHJhbnNsYXRlKCJBZGQgQXV0byBSZXNwb25zZSIpLH0pICVdCiAgICAgICAgWyUgQ0FTRSAnQ2hhbmdlJyAlXQogICAgICAgICAgICBbJSBVU0UgRWRpdFRpdGxlID0gU3RyaW5nKFRyYW5zbGF0ZSgiRWRpdCBBdXRvIFJlc3BvbnNlIikpICVdCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IEVkaXRUaXRsZS5hcHBlbmQoICc6ICcsIERhdGEuTmFtZSApIH0pICVdCiAgICBbJSBFTkQgJV0KCiAgICBbJSBJTkNMVURFICJCcmVhZGNydW1iLnR0IiBQYXRoID0gQnJlYWRjcnVtYlBhdGggJV0KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5jbHVkZUludmFsaWQiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJGaWx0ZXIgYnkgdmFsaWQgc3RhdGUiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJJbmNsdWRlSW52YWxpZCIgbmFtZT0iSW5jbHVkZUludmFsaWQiIHZhbHVlPSIxIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJJbmNsdWRlIGludmFsaWQgYXV0byByZXNwb25zZXMiKSB8IGh0bWwgJV0iIFslIERhdGEuSW5jbHVkZUludmFsaWRDaGVja2VkIHwgaHRtbCAlXS8+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJJbmNsdWRlSW52YWxpZCI+WyUgVHJhbnNsYXRlKCJJbmNsdWRlIGludmFsaWQgYXV0byByZXNwb25zZXMiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkluY2x1ZGVJbnZhbGlkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gdG8gb3ZlcnZpZXciKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249QWRkIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIEF1dG8gUmVzcG9uc2UiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25BZGQiKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25MaXN0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkZpbHRlciIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj48bGFiZWwgZm9yPSJGaWx0ZXJBdXRvUmVzcG9uc2VzIj5bJSBUcmFuc2xhdGUoIkZpbHRlciBmb3IgQXV0byBSZXNwb25zZXMiKSB8IGh0bWwgJV08L2xhYmVsPjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iRmlsdGVyQXV0b1Jlc3BvbnNlcyIgY2xhc3M9IkZpbHRlckJveCIgcGxhY2Vob2xkZXI9IlslIFRyYW5zbGF0ZSgiSnVzdCBzdGFydCB0eXBpbmcgdG8gZmlsdGVyLi4uIikgfCBodG1sICVdIiBuYW1lPSJGaWx0ZXJBdXRvUmVzcG9uc2VzIiB2YWx1ZT0iIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJGaWx0ZXIgZm9yIGF1dG8gcmVzcG9uc2VzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGaWx0ZXIiKSAlXQogICAgPC9kaXY+CgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1Jlc3VsdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSIgaWQ9IkF1dG9SZXNwb25zZXMiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVzMzcGMiPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJObyBkYXRhIGZvdW5kLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRGF0YUZvdW5kTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSZXN1bHRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgWyUgSUYgRGF0YS5WYWxpZElEICE9IDEgJV1jbGFzcz0iSW52YWxpZCJbJSBFTkQgJV0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1DaGFuZ2U7SUQ9WyUgRGF0YS5JRCB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSI+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMjApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSZXN1bHRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkZpbHRlck1lc3NhZ2UgSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI2Ij5bJSBUcmFuc2xhdGUoIk5vIG1hdGNoZXMgZm91bmQuIikgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1Jlc3VsdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3VXBkYXRlIikgJV0KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KCiAgICAgICAgICAgIFslIElGIERhdGEuQWN0aW9uID09ICdBZGQnICVdCiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBZGQgQXV0byBSZXNwb25zZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkVkaXQgQXV0byBSZXNwb25zZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIFslIEVORCAlXQoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpb24gfCB1cmkgJV1BY3Rpb24iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJRCIgdmFsdWU9IlslIERhdGEuSUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5BY3Rpb24gPT0gJ0NoYW5nZScgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29udGludWVBZnRlclNhdmUiIGlkPSJDb250aW51ZUFmdGVyU2F2ZSIgdmFsdWU9IiIvPgogICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgaWQ9Ik5hbWUiIHZhbHVlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5OYW1lSW52YWxpZCB8IGh0bWwgJV0iIG1heGxlbmd0aD0iMjAwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJTdWJqZWN0Ij48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIlN1YmplY3QiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlN1YmplY3QiIGlkPSJTdWJqZWN0IiB2YWx1ZT0iWyUgRGF0YS5TdWJqZWN0IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuU3ViamVjdEludmFsaWQgfCBodG1sICVdIiBtYXhsZW5ndGg9IjI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU3ViamVjdEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU3ViamVjdFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUmljaFRleHQiPlslIFRyYW5zbGF0ZSgiUmVzcG9uc2UiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9IlJpY2hUZXh0IiBjbGFzcz0iUmljaFRleHQiIHJvd3M9IjEwIiBjb2xzPSI2MCIgbmFtZT0iUmVzcG9uc2UiPlslIERhdGEuUmVzcG9uc2UgfCBodG1sICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlR5cGVJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVHlwZU9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVHlwZUlERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUeXBlSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkFkZHJlc3NJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJBdXRvIHJlc3BvbnNlIGZyb20iKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TeXN0ZW1BZGRyZXNzT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBZGRyZXNzSURFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFkZHJlc3NJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iVmFsaWRJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJWYWxpZElERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJWYWxpZElEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDb21tZW50Ij5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkNvbW1lbnQiIGlkPSJDb21tZW50IiB2YWx1ZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIiBtYXhsZW5ndGg9IjI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwogICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuUGVybWlzc2lvbiAhPSAncm8nICVdCiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5BY3Rpb24gPT0gJ0NoYW5nZScgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXRBbmRDb250aW51ZSIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgaWQ9IlN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUgYW5kIGZpbmlzaCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiUmVmZXJlbmNlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB0YWdzIikgfCBodG1sICVdOjwvcD4KICAgICAgICAgICAgICAgIDxkbD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9TVUJKRUNUWzIwXSZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVG8gZ2V0IHRoZSBmaXJzdCAyMCBjaGFyYWN0ZXIgb2YgdGhlIHN1YmplY3QuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9FTUFJTFs1XSZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVG8gZ2V0IHRoZSBmaXJzdCA1IGxpbmVzIG9mIHRoZSBlbWFpbC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0NVU1RPTUVSX1JFQUxOQU1FJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUbyBnZXQgdGhlIG5hbWUgb2YgdGhlIHRpY2tldCdzIGN1c3RvbWVyIHVzZXIgKGlmIGdpdmVuKS4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0NVU1RPTUVSXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRvIGdldCB0aGUgYXJ0aWNsZSBhdHRyaWJ1dGUiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgKFslIFRyYW5zbGF0ZSgiIGUuIGcuIikgfCBodG1sICVdIDxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9Gcm9tJmd0OywgJmx0O09UT0JPX0NVU1RPTUVSX1RvJmd0OywKICAgICAgICAgICAgICAgICAgICAgICAgJmx0O09UT0JPX0NVU1RPTUVSX0NjJmd0OywgJmx0O09UT0JPX0NVU1RPTUVSX1N1YmplY3QmZ3Q7LCAmbHQ7T1RPQk9fQ1VTVE9NRVJfQm9keSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0NVU1RPTUVSX0RBVEFfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiT3B0aW9ucyBvZiB0aGUgY3VycmVudCBjdXN0b21lciB1c2VyIGRhdGEiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgKFslIFRyYW5zbGF0ZSgiIGUuIGcuIikgfCBodG1sICVdIDxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9EQVRBX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19PV05FUl8qJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaWNrZXQgb3duZXIgb3B0aW9ucyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAoWyUgVHJhbnNsYXRlKCIgZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX09XTkVSX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19SRVNQT05TSUJMRV8qJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaWNrZXQgcmVzcG9uc2libGUgb3B0aW9ucyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAoWyUgVHJhbnNsYXRlKCIgZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX1JFU1BPTlNJQkxFX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DVVJSRU5UXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk9wdGlvbnMgb2YgdGhlIGN1cnJlbnQgdXNlciB3aG8gcmVxdWVzdGVkIHRoaXMgYWN0aW9uIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIChbJSBUcmFuc2xhdGUoIiBlLiBnLiIpIHwgaHRtbCAlXSA8Y29kZT4mbHQ7T1RPQk9fQ1VSUkVOVF9Vc2VyRmlyc3RuYW1lJmd0OzwvY29kZT4pLgogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fVElDS0VUXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk9wdGlvbnMgb2YgdGhlIHRpY2tldCBkYXRhIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIChbJSBUcmFuc2xhdGUoIiBlLiBnLiIpIHwgaHRtbCAlXSA8Y29kZT4mbHQ7T1RPQk9fVElDS0VUX1RpY2tldE51bWJlciZndDssICZsdDtPVE9CT19USUNLRVRfVGlja2V0SUQmZ3Q7LAogICAgICAgICAgICAgICAgICAgICAgICAmbHQ7T1RPQk9fVElDS0VUX1F1ZXVlJmd0OywgJmx0O09UT0JPX1RJQ0tFVF9TdGF0ZSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX1RJQ0tFVF9EeW5hbWljRmllbGRfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiT3B0aW9ucyBvZiB0aWNrZXQgZHluYW1pYyBmaWVsZHMgaW50ZXJuYWwga2V5IHZhbHVlcyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAoWyUgVHJhbnNsYXRlKCIgZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX1RJQ0tFVF9EeW5hbWljRmllbGRfVGVzdEZpZWxkJmd0OywKICAgICAgICAgICAgICAgICAgICAgICAgJmx0O09UT0JPX1RJQ0tFVF9EeW5hbWljRmllbGRfVGlja2V0RnJlZVRleHQxJmd0OzwvY29kZT4pLgogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fVElDS0VUX0R5bmFtaWNGaWVsZF8qX1ZhbHVlJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJPcHRpb25zIG9mIHRpY2tldCBkeW5hbWljIGZpZWxkcyBkaXNwbGF5IHZhbHVlcywgdXNlZnVsIGZvciBEcm9wZG93biBhbmQgTXVsdGlzZWxlY3QgZmllbGRzIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIChbJSBUcmFuc2xhdGUoIiBlLiBnLiIpIHwgaHRtbCAlXSA8Y29kZT4mbHQ7T1RPQk9fVElDS0VUX0R5bmFtaWNGaWVsZF9UZXN0RmllbGRfVmFsdWUmZ3Q7LAogICAgICAgICAgICAgICAgICAgICAgICAmbHQ7T1RPQk9fVElDS0VUX0R5bmFtaWNGaWVsZF9UaWNrZXRGcmVlVGV4dDFfVmFsdWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DT05GSUdfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQ29uZmlnIG9wdGlvbnMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgKFslIFRyYW5zbGF0ZSgiIGUuIGcuIikgfCBodG1sICVdIDxjb2RlPiZsdDtPVE9CT19DT05GSUdfSHR0cFR5cGUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICA8L2RsPgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlJlc3BvbnNlUmVmZXJlbmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJFeGFtcGxlIHJlc3BvbnNlIikgfCBodG1sICVdOgogICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPSI1IiBjb2xzPSI2MCIgaWQ9IlJlc3BvbnNlUmVmZXJlbmNlIj4KVGhhbmtzIGZvciB5b3VyIGVtYWlsLgoKWW91IHdyb3RlOgombHQ7c25pcCZndDsKJmx0O09UT0JPX0NVU1RPTUVSX0VNQUlMWzZdJmd0OwombHQ7L3NuaXAmZ3Q7CgotLQpTdXBlciBTdXBwb3J0IENvbXBhbnkgSW5jLiAtIFdhdGVyZm9yZCBCdXNpbmVzcyBQYXJrCjUyMDEgQmx1ZSBMYWdvb24gRHJpdmUgLSA4dGggRmxvb3IgJmFtcDsgOXRoIEZsb29yIC0gTWlhbWksIDMzMTI2IFVTQQpFbWFpbDogaG90QGZsb3JpZGEuY29tIC0gV2ViOiBodHRwOi8vaG90LmZsb3JpZGEuY29tLwogICAgICAgICAgICAgICAgPC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1VwZGF0ZSIpICVdCgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQo=</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AdminSignature.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pblNpZ25hdHVyZS50dAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlNpZ25hdHVyZSBNYW5hZ2VtZW50IikgfCBodG1sICVdPC9oMT4KCiAgICBbJSBCcmVhZGNydW1iUGF0aCA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiBUcmFuc2xhdGUoJ1NpZ25hdHVyZSBNYW5hZ2VtZW50JyksCiAgICAgICAgICAgICAgICBMaW5rID0+IEVudigiQWN0aW9uIiksCiAgICAgICAgICAgIH0sCiAgICAgICAgXQogICAgJV0KCiAgICBbJSBTV0lUQ0ggRGF0YS5BY3Rpb24gJV0KICAgICAgICBbJSBDQVNFICdBZGQnICVdCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IFRyYW5zbGF0ZSgiQWRkIFNpZ25hdHVyZSIpLH0pICVdCiAgICAgICAgWyUgQ0FTRSAnQ2hhbmdlJyAlXQogICAgICAgICAgICBbJSBVU0UgRWRpdFRpdGxlID0gU3RyaW5nKFRyYW5zbGF0ZSgiRWRpdCBTaWduYXR1cmUiKSkgJV0KICAgICAgICAgICAgWyUgQnJlYWRjcnVtYlBhdGgucHVzaCh7IE5hbWUgPT4gRWRpdFRpdGxlLmFwcGVuZCggJzogJywgRGF0YS5OYW1lICkgfSkgJV0KICAgIFslIEVORCAlXQoKICAgIFslIElOQ0xVREUgIkJyZWFkY3J1bWIudHQiIFBhdGggPSBCcmVhZGNydW1iUGF0aCAlXQoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbmNsdWRlSW52YWxpZCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkZpbHRlciBieSB2YWxpZCBzdGF0ZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IkluY2x1ZGVJbnZhbGlkIiBuYW1lPSJJbmNsdWRlSW52YWxpZCIgdmFsdWU9IjEiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkluY2x1ZGUgaW52YWxpZCBzaWduYXR1cmVzIikgfCBodG1sICVdIiBbJSBEYXRhLkluY2x1ZGVJbnZhbGlkQ2hlY2tlZCB8IGh0bWwgJV0vPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iSW5jbHVkZUludmFsaWQiPlslIFRyYW5zbGF0ZSgiSW5jbHVkZSBpbnZhbGlkIHNpZ25hdHVyZXMiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkluY2x1ZGVJbnZhbGlkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gdG8gb3ZlcnZpZXciKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1BZGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIj48L2k+WyUgVHJhbnNsYXRlKCJBZGQgU2lnbmF0dXJlIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkxpc3QiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGaWx0ZXIiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+PGxhYmVsIGZvcj0iRmlsdGVyU2lnbmF0dXJlcyI+WyUgVHJhbnNsYXRlKCJGaWx0ZXIgZm9yIFNpZ25hdHVyZXMiKSB8IGh0bWwgJV08L2xhYmVsPjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iRmlsdGVyU2lnbmF0dXJlcyIgY2xhc3M9IkZpbHRlckJveCIgcGxhY2Vob2xkZXI9IlslIFRyYW5zbGF0ZSgiSnVzdCBzdGFydCB0eXBpbmcgdG8gZmlsdGVyLi4uIikgfCBodG1sICVdIiBuYW1lPSJGaWx0ZXJTaWduYXR1cmVzIiB2YWx1ZT0iIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJGaWx0ZXIgZm9yIHNpZ25hdHVyZXMiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkZpbHRlciIpICVdCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1Jlc3VsdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSIgaWQ9IlNpZ25hdHVyZXMiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3UmVzdWx0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIFslIElGIERhdGEuVmFsaWRJRCAhPSAxICVdY2xhc3M9IkludmFsaWQiWyUgRU5EICVdPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249Q2hhbmdlO0lEPVslIERhdGEuSUQgfCB1cmkgJV0iPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgyMCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1Jlc3VsdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iRmlsdGVyTWVzc2FnZSBIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPlslIFRyYW5zbGF0ZSgiTm8gbWF0Y2hlcyBmb3VuZC4iKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3UmVzdWx0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdVcGRhdGUiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgIFslIElGIERhdGEuQWN0aW9uID09ICdBZGQnICVdCiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBZGQgU2lnbmF0dXJlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRWRpdCBTaWduYXR1cmUiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlslIERhdGEuQWN0aW9uIHwgdXJpICVdQWN0aW9uIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iSUQiIHZhbHVlPSJbJSBEYXRhLklEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuQWN0aW9uID09ICdDaGFuZ2UnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNvbnRpbnVlQWZ0ZXJTYXZlIiBpZD0iQ29udGludWVBZnRlclNhdmUiIHZhbHVlPSIiLz4KICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgaWQ9Ik5hbWUiIHZhbHVlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5OYW1lSW52YWxpZCB8IGh0bWwgJV0iIG1heGxlbmd0aD0iMjAwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJSaWNoVGV4dCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJTaWduYXR1cmUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSMgVGV4dGFyZWFzIGFsd2F5cyBzd2FsbG93IHRoZSBmaXJzdCBuZXdsaW5lIGZyb20gdGhlaXIgZGF0YSwgdGhlcmVmb3JlIHdlIG11c3QgcHJlcGVuZCBvbmUgc2luY2Ugd2Ugd2FudCB0byBwcmVzZXJ2ZSB3aGl0ZSBzcGFjZS4gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iUmljaFRleHQiIGNsYXNzPSJSaWNoVGV4dCBWYWxpZGF0ZV9SZXF1aXJlZCIgcm93cz0iMTAiIGNvbHM9IjYwIiBuYW1lPSJUZXh0Ij5bJSAiXG4iIF8gRGF0YS5UZXh0IHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSaWNoVGV4dEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmljaFRleHRTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlZhbGlkSUQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZE9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVmFsaWRJREVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVmFsaWRJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29tbWVudCI+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDb21tZW50IiBpZD0iQ29tbWVudCIgdmFsdWU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgbWF4bGVuZ3RoPSIyNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlBlcm1pc3Npb24gIT0gJ3JvJyAlXQojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuQWN0aW9uID09ICdDaGFuZ2UnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0QW5kQ29udGludWUiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIGFuZCBmaW5pc2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwogICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiSGludCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB0YWdzIikgfCBodG1sICVdOjwvcD4KICAgICAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX09XTkVSXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRpY2tldCBvd25lciBvcHRpb25zIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoImUuIGcuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPiZsdDtPVE9CT19PV05FUl9Vc2VyRmlyc3RuYW1lJmd0OzwvY29kZT4pLgogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fUkVTUE9OU0lCTEVfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVGlja2V0IHJlc3BvbnNpYmxlIG9wdGlvbnMiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiZS4gZy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Jmx0O09UT0JPX1JFU1BPTlNJQkxFX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DVVJSRU5UXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk9wdGlvbnMgb2YgdGhlIGN1cnJlbnQgdXNlciB3aG8gcmVxdWVzdGVkIHRoaXMgYWN0aW9uIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoImUuIGcuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPiZsdDtPVE9CT19DVVJSRU5UX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19USUNLRVRfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiT3B0aW9ucyBvZiB0aGUgdGlja2V0IGRhdGEiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiZS4gZy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Jmx0O09UT0JPX1RJQ0tFVF9UaWNrZXROdW1iZXI+LCAmbHQ7T1RPQk9fVElDS0VUX1RpY2tldElEJmd0OywgJmx0O09UT0JPX1RJQ0tFVF9RdWV1ZSZndDssICZsdDtPVE9CT19USUNLRVRfU3RhdGUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9EQVRBXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk9wdGlvbnMgb2YgdGhlIGN1cnJlbnQgY3VzdG9tZXIgdXNlciBkYXRhIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoImUuIGcuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9EQVRBX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DT05GSUdfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQ29uZmlnIG9wdGlvbnMiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX0NPTkZJR19IdHRwVHlwZSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJFeGFtcGxlIHNpZ25hdHVyZSIpIHwgaHRtbCAlXToKICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPSI1IiBjb2xzPSI2MCIgbmFtZT0iUmVzcG9uc2UiPgpZb3VyIE9UT0JPLVRlYW0KCiZsdDtPVE9CT19DVVJSRU5UX1VzZXJGaXJzdG5hbWUmZ3Q7ICZsdDtPVE9CT19DVVJSRU5UX1VzZXJMYXN0bmFtZSZndDsKCi0tClN1cGVyIFN1cHBvcnQgQ29tcGFueSBJbmMuIC0gV2F0ZXJmb3JkIEJ1c2luZXNzIFBhcmsKNTIwMSBCbHVlIExhZ29vbiBEcml2ZSAtIDh0aCBGbG9vciAmIDl0aCBGbG9vciAtIE1pYW1pLCAzMzEyNiBVU0EKRW1haWw6IGhvdEBmbG9yaWRhLmNvbSAtIFdlYjogaHR0cDovL2hvdC5mbG9yaWRhLmNvbS8KLS0KUFM6IFlvdXIgZW1haWwgYWRkcmVzcyBpbiBvdXIgZGF0YWJhc2UgaXMgIiZsdDtPVE9CT19DVVNUT01FUl9EQVRBX1VzZXJFbWFpbCZndDsiLgogICAgICAgICAgICAgICAgPC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1VwZGF0ZSIpICVdCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlldyIpICVdCg==</File>
        <File Location="Custom/Kernel/System/Queue.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL1N5c3RlbS9RdWV1ZS5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpRdWV1ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBwYXJlbnQgICAgICAgICAgICAgICAgICAgICAgICBxdyhLZXJuZWw6OlN5c3RlbTo6RXZlbnRIYW5kbGVyKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3RhbmRhcmRUZW1wbGF0ZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRyYW5zbGF0aW9ucycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6UXVldWUgLSBxdWV1ZSBsaWIKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIHF1ZXVlIGZ1bmN0aW9ucy4gRS4gZy4gdG8gYWRkIHF1ZXVlIG9yIG90aGVyIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCkRvbid0IHVzZSB0aGUgY29uc3RydWN0b3IgZGlyZWN0bHksIHVzZSB0aGUgT2JqZWN0TWFuYWdlciBpbnN0ZWFkOgoKICAgIG15ICRRdWV1ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e1F1ZXVlSUR9ID0gJFBhcmFte1F1ZXVlSUR9IHx8ICcnOwoKICAgICRTZWxmLT57Q2FjaGVUeXBlfSA9ICdRdWV1ZSc7CiAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSA2MCAqIDYwICogMjQgKiAyMDsKCiAgICAjIGxvYWQgZ2VuZXJhdG9yIHByZWZlcmVuY2VzIG1vZHVsZQogICAgbXkgJEdlbmVyYXRvck1vZHVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnUXVldWU6OlByZWZlcmVuY2VzTW9kdWxlJykKICAgICAgICB8fCAnS2VybmVsOjpTeXN0ZW06OlF1ZXVlOjpQcmVmZXJlbmNlc0RCJzsKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkR2VuZXJhdG9yTW9kdWxlKSApIHsKICAgICAgICAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fSA9ICRHZW5lcmF0b3JNb2R1bGUtPm5ldygpOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgIGRlZmF1bHQgcXVldWUgc2V0dGluZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICAgICMgIHRoZXNlIHNldHRpbmdzIGFyZSB1c2VkIGJ5IHRoZSBDTEkgdmVyc2lvbiAgICAgICAgICMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICRTZWxmLT57UXVldWVEZWZhdWx0c30gPSB7CiAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICBVbmxvY2tUaW1lb3V0ICAgICAgID0+IDAsCiAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDAsCiAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDAsCiAgICAgICAgU3lzdGVtQWRkcmVzc0lEICAgICA9PiAxLAogICAgICAgIFNhbHV0YXRpb25JRCAgICAgICAgPT4gMSwKICAgICAgICBTaWduYXR1cmVJRCAgICAgICAgID0+IDEsCiAgICAgICAgRm9sbG93VXBJRCAgICAgICAgICA9PiAxLAogICAgICAgIEZvbGxvd1VwTG9jayAgICAgICAgPT4gMCwKICAgIH07CgogICAgIyBpbml0IG9mIGV2ZW50IGhhbmRsZXIKICAgICRTZWxmLT5FdmVudEhhbmRsZXJJbml0KAogICAgICAgIENvbmZpZyA9PiAnUXVldWU6OkV2ZW50TW9kdWxlUG9zdCcsCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdldFN5c3RlbUFkZHJlc3MoKQoKZ2V0IGEgcXVldWUgc3lzdGVtIGVtYWlsIGFkZHJlc3MgYXMgaGFzaCAoRW1haWwsIFJlYWxOYW1lKQoKICAgIG15ICVBZGRyZXNzID0gJFF1ZXVlT2JqZWN0LT5HZXRTeXN0ZW1BZGRyZXNzKAogICAgICAgIFF1ZXVlSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBHZXRTeXN0ZW1BZGRyZXNzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICBteSAlQWRkcmVzczsKICAgIG15ICRRdWV1ZUlEID0gJFBhcmFte1F1ZXVlSUR9IHx8ICRTZWxmLT57UXVldWVJRH07CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1Qgc2EudmFsdWUwLCBzYS52YWx1ZTEgRlJPTSBzeXN0ZW1fYWRkcmVzcyBzYSwgcXVldWUgc3EgJwogICAgICAgICAgICAuICdXSEVSRSBzcS5pZCA9ID8gQU5EIHNhLmlkID0gc3Euc3lzdGVtX2FkZHJlc3NfaWQnLAogICAgICAgIEJpbmQgID0+IFsgXCRRdWV1ZUlEIF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEFkZHJlc3N7RW1haWx9ICAgID0gJFJvd1swXTsKICAgICAgICAkQWRkcmVzc3tSZWFsTmFtZX0gPSAkUm93WzFdOwogICAgfQoKICAgICMgcHJlcGFyZSByZWFsbmFtZSBxdW90ZQogICAgaWYgKCAkQWRkcmVzc3tSZWFsTmFtZX0gPX4gLygsfEB8XCh8XCl8OikvICYmICRBZGRyZXNze1JlYWxOYW1lfSAhfiAvXigifCcpLyApIHsKICAgICAgICAkQWRkcmVzc3tSZWFsTmFtZX0gPX4gcy8iL1wiL2c7CiAgICAgICAgJEFkZHJlc3N7UmVhbE5hbWV9ID0gJyInIC4gJEFkZHJlc3N7UmVhbE5hbWV9IC4gJyInOwogICAgfQoKICAgIHJldHVybiAlQWRkcmVzczsKfQoKPWhlYWQyIEdldFNpZ25hdHVyZSgpCgpnZXQgYSBxdWV1ZSBzaWduYXR1cmUKCiAgICBteSAkU2lnbmF0dXJlID0gJFF1ZXVlT2JqZWN0LT5HZXRTaWduYXR1cmUoUXVldWVJRCA9PiAxMjMpOwoKPWN1dAoKc3ViIEdldFNpZ25hdHVyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17UXVldWVJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFF1ZXVlSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIHRleHQgRlJPTSBzaWduYXR1cmUgc2ksIHF1ZXVlIHNxICcKICAgICAgICAgICAgLiAnIFdIRVJFIHNxLmlkID0gPyBBTkQgc3Euc2lnbmF0dXJlX2lkID0gc2kuaWQnLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtRdWV1ZUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFN0cmluZyA9ICcnOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFN0cmluZyA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCj1oZWFkMiBRdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJBZGQoKQoKdG8gYWRkIGEgdGVtcGxhdGUgdG8gYSBxdWV1ZQoKICAgIG15ICRTdWNjZXNzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJBZGQoCiAgICAgICAgUXVldWVJRCAgICAgICAgICAgID0+IDEyMywKICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIEFjdGl2ZSAgICAgICAgICAgICA9PiAxLCAgICAgICAgIyB0byBzZXQvY29uZmlybSAoMSkgb3IgcmVtb3ZlICgwKSB0aGUgcmVsYXRpb24KICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBRdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUXVldWVJRCBTdGFuZGFyZFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZGVsZXRlIGV4aXN0aW5nIHJlbGF0aW9uCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICdERUxFVEUgRlJPTSBxdWV1ZV9zdGFuZGFyZF90ZW1wbGF0ZQogICAgICAgICAgICBXSEVSRSBxdWV1ZV9pZCA9ID8KICAgICAgICAgICAgQU5EIHN0YW5kYXJkX3RlbXBsYXRlX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17UXVldWVJRH0sIFwkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSBdLAogICAgKTsKCiAgICAjIHJldHVybiBpZiByZWxhdGlvbiBpcyBub3QgYWN0aXZlCiAgICBpZiAoICEkUGFyYW17QWN0aXZlfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGluc2VydCBuZXcgcmVsYXRpb24KICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBJTlNFUlQgSU5UTyBxdWV1ZV9zdGFuZGFyZF90ZW1wbGF0ZSAocXVldWVfaWQsIHN0YW5kYXJkX3RlbXBsYXRlX2lkLCBjcmVhdGVfdGltZSwKICAgICAgICAgICAgICAgIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkKICAgICAgICAgICAgVkFMVUVTICg/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtRdWV1ZUlEfSwgXCRQYXJhbXtTdGFuZGFyZFRlbXBsYXRlSUR9LCBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSBdLAogICAgKTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CiAgICByZXR1cm4gJFN1Y2Nlc3M7Cn0KCj1oZWFkMiBRdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KCkKCmdldCBzdGFuZGFyZCByZXNwb25zZXMgb2YgYSBxdWV1ZQoKICAgIG15ICVUZW1wbGF0ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoIFF1ZXVlSUQgPT4gMTIzICk7CgpSZXR1cm5zOgogICAgJVRlbXBsYXRlcyA9ICgKICAgICAgICAxID0+ICdTb21lIE5hbWUnLAogICAgICAgIDIgPT4gJ1NvbWUgTmFtZScsCiAgICApOwoKICAgIG15ICVSZXNwb25zZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoCiAgICAgICAgUXVldWVJRCAgICAgICA9PiAxMjMsCiAgICAgICAgVGVtcGxhdGVUeXBlcyA9PiAxLAogICAgKTsKClJldHVybnM6CiAgICAlUmVzcG9uc2VzID0gKAogICAgICAgIEFuc3dlciA9PiB7CiAgICAgICAgICAgIDEgPT4gJ1NvbWUgTmFtZScsCiAgICAgICAgICAgIDIgPT4gJ1NvbWUgTmFtZScsCiAgICAgICAgfSwKICAgICAgICAjIC4uLgogICAgKTsKCiAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KCBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gMTIzICk7CgpSZXR1cm5zOgogICAgJVF1ZXVlcyA9ICgKICAgICAgICAxID0+ICdTb21lIE5hbWUnLAogICAgICAgIDIgPT4gJ1NvbWUgTmFtZScsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1F1ZXVlSUR9ICYmICEkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0dvdCBubyBTdGFuZGFyZFRlbXBsYXRlSUQgb3IgUXVldWVJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVmFsaWRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKICAgIG15ICREQk9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIG15ICRUZW1wbGF0ZVR5cGVzID0gJFBhcmFte1RlbXBsYXRlVHlwZXN9IHx8ICcwJzsKCiAgICBteSAkQ2FjaGVLZXk7CgogICAgaWYgKCAkUGFyYW17UXVldWVJRH0gKSB7CgogICAgICAgICMgY2hlY2sgaWYgdGhpcyByZXN1bHQgaXMgcHJlc2VudCAoaW4gY2FjaGUpCiAgICAgICAgJENhY2hlS2V5ID0gIlN0YW5kYXJkVGVtcGxhdGVzOjokUGFyYW17UXVldWVJRH06OiRUZW1wbGF0ZVR5cGVzIjsKICAgICAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJXskQ2FjaGV9IGlmIHJlZiAkQ2FjaGUgZXEgJ0hBU0gnOwoKICAgICAgICAjIGdldCBzdGQuIHRlbXBsYXRlcwogICAgICAgIG15ICRTUUwgPSAiU0VMRUNUIHN0LmlkLCBzdC5uYW1lLCBzdC50ZW1wbGF0ZV90eXBlICIKICAgICAgICAgICAgLiAiIEZST00gc3RhbmRhcmRfdGVtcGxhdGUgc3QsIHF1ZXVlX3N0YW5kYXJkX3RlbXBsYXRlIHFzdCBXSEVSRSAiCiAgICAgICAgICAgIC4gIiBxc3QucXVldWVfaWQgSU4gKCIKICAgICAgICAgICAgLiAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17UXVldWVJRH0sICdJbnRlZ2VyJyApCiAgICAgICAgICAgIC4gIikgQU5EICIKICAgICAgICAgICAgLiAiIHFzdC5zdGFuZGFyZF90ZW1wbGF0ZV9pZCA9IHN0LmlkIEFORCAiCiAgICAgICAgICAgIC4gIiBzdC52YWxpZF9pZCBJTiAoICR7XChqb2luICcsICcsICRWYWxpZE9iamVjdC0+VmFsaWRJRHNHZXQoKSl9ICkiCiAgICAgICAgICAgIC4gIiBPUkRFUiBCWSBzdC5uYW1lIjsKCiAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoIFNRTCA9PiAkU1FMICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15ICVTdGFuZGFyZFRlbXBsYXRlczsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgICAgIGlmICggJFBhcmFte1RlbXBsYXRlVHlwZXN9ICkgewogICAgICAgICAgICAgICAgJFN0YW5kYXJkVGVtcGxhdGVzeyAkUm93WzJdIH0tPnsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTdGFuZGFyZFRlbXBsYXRlc3sgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzdG9yZSBzdGQgdGVtcGxhdGVzIChpbiBjYWNoZSkKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFwlU3RhbmRhcmRUZW1wbGF0ZXMsCgogICAgICAgICk7CiAgICAgICAgcmV0dXJuICVTdGFuZGFyZFRlbXBsYXRlczsKICAgIH0KCiAgICBlbHNlIHsKCiAgICAgICAgIyBjaGVjayBpZiB0aGlzIHJlc3VsdCBpcyBwcmVzZW50IChpbiBjYWNoZSkKICAgICAgICAkQ2FjaGVLZXkgPSAiUXVldWVzOjokUGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSI7CiAgICAgICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICV7JENhY2hlfSBpZiByZWYgJENhY2hlIGVxICdIQVNIJzsKCiAgICAgICAgIyBnZXQgcXVldWVzCiAgICAgICAgbXkgJFNRTCA9ICJTRUxFQ1QgcS5pZCwgcS5uYW1lICIKICAgICAgICAgICAgLiAiIEZST00gcXVldWUgcSwgcXVldWVfc3RhbmRhcmRfdGVtcGxhdGUgcXN0IFdIRVJFICIKICAgICAgICAgICAgLiAiIHFzdC5zdGFuZGFyZF90ZW1wbGF0ZV9pZCBJTiAoIgogICAgICAgICAgICAuICREQk9iamVjdC0+UXVvdGUoICRQYXJhbXtTdGFuZGFyZFRlbXBsYXRlSUR9LCAnSW50ZWdlcicgKQogICAgICAgICAgICAuICIpIEFORCAiCiAgICAgICAgICAgIC4gIiBxc3QucXVldWVfaWQgPSBxLmlkIEFORCAiCiAgICAgICAgICAgIC4gIiBxLnZhbGlkX2lkIElOICggJHtcKGpvaW4gJywgJywgJFZhbGlkT2JqZWN0LT5WYWxpZElEc0dldCgpKX0gKSIKICAgICAgICAgICAgLiAiIE9SREVSIEJZIHEubmFtZSI7CgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKCBTUUwgPT4gJFNRTCApOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICBteSAlUXVldWVzOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkUXVldWVzeyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgICAgIH0KCiAgICAgICAgIyBzdG9yZSBxdWV1ZXMgKGluIGNhY2hlKQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gXCVRdWV1ZXMsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICVRdWV1ZXM7CiAgICB9Cn0KCj1oZWFkMiBHZXRBbGxRdWV1ZXMoKQoKZ2V0IGFsbCB2YWxpZCBzeXN0ZW0gcXVldWVzCgogICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+R2V0QWxsUXVldWVzKCk7CgpnZXQgYWxsIHN5c3RlbSBxdWV1ZXMgb2YgYSB1c2VyIHdpdGggcGVybWlzc2lvbiB0eXBlIChlLiBnLiBDPHJvPiwgQzxtb3ZlX2ludG8+LCBDPHJ3PiwgLi4uKQoKICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPkdldEFsbFF1ZXVlcyggVXNlcklEID0+IDEyMywgVHlwZSA9PiAncm8nICk7Cgo9Y3V0CgpzdWIgR2V0QWxsUXVldWVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFR5cGUgPSAkUGFyYW17VHlwZX0gfHwgJ3JvJzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFZhbGlkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7CiAgICBteSAkREJPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGZldGNoIGFsbCBxdWV1ZXMKICAgIG15ICRDYWNoZUtleTsKICAgIGlmICggJFBhcmFte1VzZXJJRH0gKSB7CgogICAgICAgICMgZ2V0IGdyb3VwIGxpc3QKICAgICAgICBteSAlR3JvdXBMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25Vc2VyR2V0KAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFR5cGUgICA9PiAkVHlwZSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gaWYgISVHcm91cExpc3Q7CgogICAgICAgIG15ICRHcm91cFN0cmluZyA9IGpvaW4gJywgJywgc29ydCBrZXlzICVHcm91cExpc3Q7CiAgICAgICAgJENhY2hlS2V5ID0gIkdldEFsbFF1ZXVlczo6VXNlcklEOjoke1R5cGV9Ojoke0dyb3VwU3RyaW5nfTo6JFBhcmFte1VzZXJJRH0iOwoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICV7JENhY2hlfSBpZiAkQ2FjaGU7CgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHF1ZXVlIFdIRVJFICIKICAgICAgICAgICAgICAgIC4gIiBncm91cF9pZCBJTiAoICRHcm91cFN0cmluZyApIEFORCAiCiAgICAgICAgICAgICAgICAuICIgdmFsaWRfaWQgSU4gKCAke1woam9pbiAnLCAnLCAkVmFsaWRPYmplY3QtPlZhbGlkSURzR2V0KCkpfSApIiwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17Q3VzdG9tZXJVc2VySUR9ICkgewoKICAgICAgICAjIGdldCBncm91cCBpZHMKICAgICAgICBteSBAR3JvdXBJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJFR5cGUsCiAgICAgICAgICAgIFJlc3VsdCA9PiAnSUQnLAogICAgICAgICk7CgogICAgICAgIHJldHVybiBpZiAhQEdyb3VwSURzOwoKICAgICAgICBteSAkR3JvdXBTdHJpbmcgPSBqb2luICcsICcsIHNvcnQgQEdyb3VwSURzOwogICAgICAgICRDYWNoZUtleSA9ICJHZXRBbGxRdWV1ZXM6OkN1c3RvbWVyVXNlcklEOjoke1R5cGV9Ojoke0dyb3VwU3RyaW5nfTo6JFBhcmFte0N1c3RvbWVyVXNlcklEfSI7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJXskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkLCBuYW1lIEZST00gcXVldWUgV0hFUkUgIgogICAgICAgICAgICAgICAgLiAiIGdyb3VwX2lkIElOICggJEdyb3VwU3RyaW5nICkgQU5EICIKICAgICAgICAgICAgICAgIC4gIiB2YWxpZF9pZCBJTiAoICR7XChqb2luICcsICcsICRWYWxpZE9iamVjdC0+VmFsaWRJRHNHZXQoKSl9ICkiLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgJENhY2hlS2V5ID0gJ0dldEFsbFF1ZXVlcyc7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJXskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkLCBuYW1lIEZST00gcXVldWUgV0hFUkUgdmFsaWRfaWQgSU4gIgogICAgICAgICAgICAgICAgLiAiKCAke1woam9pbiAnLCAnLCAkVmFsaWRPYmplY3QtPlZhbGlkSURzR2V0KCkpfSApIiwKICAgICAgICApOwogICAgfQoKICAgIG15ICVNb3ZlUXVldWVzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE1vdmVRdWV1ZXN7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgIyBzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcJU1vdmVRdWV1ZXMsCiAgICApOwoKICAgIHJldHVybiAlTW92ZVF1ZXVlczsKfQoKPWhlYWQyIEdldEFsbEN1c3RvbVF1ZXVlcygpCgpnZXQgYWxsIGN1c3RvbSBxdWV1ZXMgb2Ygb25lIHVzZXIKCiAgICBteSBAUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5HZXRBbGxDdXN0b21RdWV1ZXMoIFVzZXJJRCA9PiAxMjMgKTsKCj1jdXQKCnN1YiBHZXRBbGxDdXN0b21RdWV1ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0dldEFsbEN1c3RvbVF1ZXVlczo6JyAuICRQYXJhbXtVc2VySUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gQHskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgc2VhcmNoIGFsbCBjdXN0b20gcXVldWVzCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICdTRUxFQ1QgcXVldWVfaWQgRlJPTSBwZXJzb25hbF9xdWV1ZXMgV0hFUkUgdXNlcl9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1VzZXJJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAUXVldWVJRHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBRdWV1ZUlEcywgJFJvd1swXTsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFxAUXVldWVJRHMsCiAgICApOwoKICAgIHJldHVybiBAUXVldWVJRHM7Cn0KCj1oZWFkMiBRdWV1ZUxvb2t1cCgpCgpnZXQgaWQgb3IgbmFtZSBmb3IgcXVldWUKCiAgICBteSAkUXVldWUgPSAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKCBRdWV1ZUlEID0+ICRRdWV1ZUlEICk7CgogICAgbXkgJFF1ZXVlSUQgPSAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkUXVldWUgKTsKCj1jdXQKCnN1YiBRdWV1ZUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17UXVldWV9ICYmICEkUGFyYW17UXVldWVJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdHb3Qgbm8gUXVldWUgb3IgUXVldWVJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgKGFscmVhZHkgY2FjaGVkKSBxdWV1ZSBkYXRhCiAgICBteSAlUXVldWVMaXN0ID0gJFNlbGYtPlF1ZXVlTGlzdCgKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICBteSAkS2V5OwogICAgbXkgJFZhbHVlOwogICAgbXkgJFJldHVybkRhdGE7CiAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAkS2V5ICAgICAgICA9ICdRdWV1ZUlEJzsKICAgICAgICAkVmFsdWUgICAgICA9ICRQYXJhbXtRdWV1ZUlEfTsKICAgICAgICAkUmV0dXJuRGF0YSA9ICRRdWV1ZUxpc3R7ICRQYXJhbXtRdWV1ZUlEfSB9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJEtleSAgID0gJ1F1ZXVlJzsKICAgICAgICAkVmFsdWUgPSAkUGFyYW17UXVldWV9OwogICAgICAgIG15ICVRdWV1ZUxpc3RSZXZlcnNlID0gcmV2ZXJzZSAlUXVldWVMaXN0OwogICAgICAgICRSZXR1cm5EYXRhID0gJFF1ZXVlTGlzdFJldmVyc2V7ICRQYXJhbXtRdWV1ZX0gfTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGRhdGEgZXhpc3RzCiAgICBpZiAoICEkUmV0dXJuRGF0YSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZvdW5kIG5vICRLZXkgZm9yICRWYWx1ZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAkUmV0dXJuRGF0YTsKfQoKPWhlYWQyIEdldEZvbGxvd1VwT3B0aW9uKCkKCmdldCBGb2xsb3dVcE9wdGlvbiBmb3IgdGhlIGdpdmVuIFF1ZXVlSUQKCiAgICBteSAkRm9sbG93VXBPcHRpb24gPSAkUXVldWVPYmplY3QtPkdldEZvbGxvd1VwT3B0aW9uKCBRdWV1ZUlEID0+ICRRdWV1ZUlEICk7CgpyZXR1cm5zIGFueSBvZiAncG9zc2libGUnLCAncmVqZWN0JywgJ25ldyB0aWNrZXQnLgoKPWN1dAoKc3ViIEdldEZvbGxvd1VwT3B0aW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUXVldWVJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGZldGNoIHF1ZXVlcyBkYXRhCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBzZi5uYW1lIEZST00gZm9sbG93X3VwX3Bvc3NpYmxlIHNmLCBxdWV1ZSBzcSAnCiAgICAgICAgICAgIC4gJyBXSEVSRSBzcS5mb2xsb3dfdXBfaWQgPSBzZi5pZCBBTkQgc3EuaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17UXVldWVJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAkUmV0dXJuID0gJyc7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUmV0dXJuID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJFJldHVybjsKfQoKPWhlYWQyIEdldEZvbGxvd1VwT3B0aW9uTGlzdCgpCgpnZXQgRm9sbG93LVVwIE9wdGlvbiBsaXN0CgogICAgbXkgJUZvbGxvd1VwT3B0aW9uTGlzdCA9ICRRdWV1ZU9iamVjdC0+R2V0Rm9sbG93VXBPcHRpb25MaXN0KAogICAgICAgIFZhbGlkID0+IDAsICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEKICAgICk7CgpSZXR1cm46CgogICAgJUZvbGxvd1VwT3B0aW9uTGlzdCA9ICgKICAgICAgICAgICAgICAnMScgPT4gJ3Bvc3NpYmxlJywKICAgICAgICAgICAgICAnMycgPT4gJ25ldyB0aWNrZXQnLAogICAgICAgICAgICAgICcyJyA9PiAncmVqZWN0JwogICAgICAgICAgICApCgo9Y3V0CgpzdWIgR2V0Rm9sbG93VXBPcHRpb25MaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZQogICAgbXkgJFZhbGlkID0gJFBhcmFte1ZhbGlkfSA/IDEgOiAwOwoKICAgICMgY3JlYXRlIHRoZSB2YWxpZCBsaXN0CiAgICBteSAkVmFsaWRJRHMgPSBqb2luICcsICcsICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpOwoKICAgICMgYnVpbGQgU1FMCiAgICBteSAkU1FMID0gJ1NFTEVDVCBpZCwgbmFtZSBGUk9NIGZvbGxvd191cF9wb3NzaWJsZSc7CgogICAgIyBhZGQgV0hFUkUgc3RhdGVtZW50CiAgICBpZiAoJFZhbGlkKSB7CiAgICAgICAgJFNRTCAuPSAnIFdIRVJFIHZhbGlkX2lkIElOICgnIC4gJFZhbGlkSURzIC4gJyknOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBnZXQgZGF0YSBmcm9tIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJFNRTCwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlRm9sbG93VXBPcHRpb25MaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEZvbGxvd1VwT3B0aW9uTGlzdHsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICByZXR1cm4gJUZvbGxvd1VwT3B0aW9uTGlzdDsKfQoKPWhlYWQyIEdldEZvbGxvd1VwTG9ja09wdGlvbigpCgpnZXQgRm9sbG93VXBMb2NrT3B0aW9uIGZvciB0aGUgZ2l2ZW4gUXVldWVJRAoKICAgIG15ICRGb2xsb3dVcExvY2tPcHRpb24gPSAkUXVldWVPYmplY3QtPkdldEZvbGxvd1VwTG9ja09wdGlvbiggUXVldWVJRCA9PiAkUXVldWVJRCApOwoKcmV0dXJucyAnMScgaWYgdGlja2V0IHNob3VsZCBiZSBsb2NrZWQgYWZ0ZXIgYSBmb2xsb3cgdXAsICcwJyBpZiBub3QuCgo9Y3V0CgpzdWIgR2V0Rm9sbG93VXBMb2NrT3B0aW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUXVldWVJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgKGFscmVhZHkgY2FjaGVkKSBxdWV1ZSBkYXRhCiAgICBteSAlUXVldWUgPSAkU2VsZi0+UXVldWVHZXQoCiAgICAgICAgSUQgPT4gJFBhcmFte1F1ZXVlSUR9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISVRdWV1ZTsKICAgIHJldHVybiAkUXVldWV7Rm9sbG93VXBMb2NrfTsKfQoKPWhlYWQyIEdldFF1ZXVlR3JvdXBJRCgpCgpnZXQgR3JvdXBJRCBkZWZpbmVkIGZvciB0aGUgZ2l2ZW4gUXVldWVJRC4KCiAgICBteSAkR3JvdXBJRCA9ICRRdWV1ZU9iamVjdC0+R2V0UXVldWVHcm91cElEKCBRdWV1ZUlEID0+ICRRdWV1ZUlEICk7Cgo9Y3V0CgpzdWIgR2V0UXVldWVHcm91cElEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUXVldWVJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgKGFscmVhZHkgY2FjaGVkKSBxdWV1ZSBkYXRhCiAgICBteSAlUXVldWUgPSAkU2VsZi0+UXVldWVHZXQoCiAgICAgICAgSUQgPT4gJFBhcmFte1F1ZXVlSUR9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISVRdWV1ZTsKICAgIHJldHVybiAkUXVldWV7R3JvdXBJRH07Cn0KCj1oZWFkMiBRdWV1ZUFkZCgpCgphZGQgcXVldWUgd2l0aCBhdHRyaWJ1dGVzCgogICAgbXkgJFF1ZXVlSUQgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKAogICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ1NvbWU6OlF1ZXVlJywKICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgR3JvdXBJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzEnLCAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMTIwLCAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gNjAsICAgICAgICAgICMgKG9wdGlvbmFsLCBub3RpZnkgYWdlbnQgaWYgZmlyc3QgcmVzcG9uc2UgZXNjYWxhdGlvbiBpcyA2MCUgcmVhY2hlZCkKICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDE4MCwgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDgwLCAgICAgICAgICAjIChvcHRpb25hbCwgbm90aWZ5IGFnZW50IGlmIHVwZGF0ZSBlc2NhbGF0aW9uIGlzIDgwJSByZWFjaGVkKQogICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gNTgwLCAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gODAsICAgICAgICAgICMgKG9wdGlvbmFsLCBub3RpZnkgYWdlbnQgaWYgc29sdXRpb24gZXNjYWxhdGlvbiBpcyA4MCUgcmVhY2hlZCkKICAgICAgICBVbmxvY2tUaW1lb3V0ICAgICAgID0+IDQ4MCwgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBGb2xsb3dVcElEICAgICAgICAgID0+IDMsICAgICAgICAgICAjIHBvc3NpYmxlICgxKSwgcmVqZWN0ICgyKSBvciBuZXcgdGlja2V0ICgzKSAob3B0aW9uYWwsIGRlZmF1bHQgMCkKICAgICAgICBGb2xsb3dVcExvY2sgICAgICAgID0+IDAsICAgICAgICAgICAjIHllcyAoMSkgb3Igbm8gKDApIChvcHRpb25hbCwgZGVmYXVsdCAwKQogICAgICAgIERlZmF1bHRTaWduS2V5ICAgICAgPT4gJ2tleSBuYW1lJywgICMgKG9wdGlvbmFsKQogICAgICAgIFN5c3RlbUFkZHJlc3NJRCAgICAgPT4gMSwKICAgICAgICBTYWx1dGF0aW9uSUQgICAgICAgID0+IDEsCiAgICAgICAgU2lnbmF0dXJlSUQgICAgICAgICA9PiAxLAogICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1NvbWUgY29tbWVudCcsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXVlQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBpZiB0aGlzIHJlcXVlc3QgaXMgZnJvbSB3ZWIgYW5kIG5vdCBmcm9tIGNvbW1hbmQgbGluZQogICAgaWYgKCAhJFBhcmFte05vRGVmYXVsdFZhbHVlc30gKSB7CiAgICAgICAgZm9yICgKICAgICAgICAgICAgcXcoVW5sb2NrVGltZW91dCBGaXJzdFJlc3BvbnNlVGltZSBGaXJzdFJlc3BvbnNlTm90aWZ5IFVwZGF0ZVRpbWUgVXBkYXRlTm90aWZ5IFNvbHV0aW9uVGltZSBTb2x1dGlvbk5vdGlmeQogICAgICAgICAgICBGb2xsb3dVcExvY2sgU3lzdGVtQWRkcmVzc0lEIFNhbHV0YXRpb25JRCBTaWduYXR1cmVJRAogICAgICAgICAgICBGb2xsb3dVcElEIEZvbGxvd1VwTG9jayBEZWZhdWx0U2lnbktleSBDYWxlbmRhcikKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgSSBhZGRlZCBkZWZhdWx0IHZhbHVlcyBpbiB0aGUgTG9hZCBSb3V0aW5lCiAgICAgICAgICAgIGlmICggISRQYXJhbXskX30gKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17JF99ID0gJFNlbGYtPntRdWV1ZURlZmF1bHRzfS0+eyRffSB8fCAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvciAocXcoTmFtZSBHcm91cElEIFN5c3RlbUFkZHJlc3NJRCBTYWx1dGF0aW9uSUQgU2lnbmF0dXJlSUQgVmFsaWRJRCBVc2VySUQgRm9sbG93VXBJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JF99ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkXyEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjbGVhbnVwIHF1ZXVlIG5hbWUKICAgICRQYXJhbXtOYW1lfSA9fiBzLyhcbnxccikvL2c7CiAgICAkUGFyYW17TmFtZX0gPX4gcy9ccyQvL2c7CgogICAgIyBjaGVjayBxdWV1ZSBuYW1lCiAgICBpZiAoICRQYXJhbXtOYW1lfSA9fiAvOjokL2kgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbnZhbGlkIFF1ZXVlIG5hbWUgJyRQYXJhbXtOYW1lfSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGEgcXVldWUgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMKICAgIGlmICggJFNlbGYtPk5hbWVFeGlzdHNDaGVjayggTmFtZSA9PiAkUGFyYW17TmFtZX0gKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkEgcXVldWUgd2l0aCB0aGUgbmFtZSAnJFBhcmFte05hbWV9JyBhbHJlYWR5IGV4aXN0cy4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICREQk9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBxdWV1ZSAobmFtZSwgZ3JvdXBfaWQsIHVubG9ja190aW1lb3V0LCBzeXN0ZW1fYWRkcmVzc19pZCwgJwogICAgICAgICAgICAuICcgY2FsZW5kYXJfbmFtZSwgZGVmYXVsdF9zaWduX2tleSwgc2FsdXRhdGlvbl9pZCwgc2lnbmF0dXJlX2lkLCAnCiAgICAgICAgICAgIC4gJyBmaXJzdF9yZXNwb25zZV90aW1lLCBmaXJzdF9yZXNwb25zZV9ub3RpZnksIHVwZGF0ZV90aW1lLCAnCiAgICAgICAgICAgIC4gJyB1cGRhdGVfbm90aWZ5LCBzb2x1dGlvbl90aW1lLCBzb2x1dGlvbl9ub3RpZnksIGZvbGxvd191cF9pZCwgJwogICAgICAgICAgICAuICcgZm9sbG93X3VwX2xvY2ssIHZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgJwogICAgICAgICAgICAuICcgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgVkFMVUVTICcKICAgICAgICAgICAgLiAnICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCAnCiAgICAgICAgICAgIC4gJyA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwgICAgICAgICAgICAgIFwkUGFyYW17R3JvdXBJRH0sICAgICAgICAgICAgIFwkUGFyYW17VW5sb2NrVGltZW91dH0sIFwkUGFyYW17U3lzdGVtQWRkcmVzc0lEfSwKICAgICAgICAgICAgXCRQYXJhbXtDYWxlbmRhcn0sICAgICAgICAgIFwkUGFyYW17RGVmYXVsdFNpZ25LZXl9LCAgICAgIFwkUGFyYW17U2FsdXRhdGlvbklEfSwgIFwkUGFyYW17U2lnbmF0dXJlSUR9LAogICAgICAgICAgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSwgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwKICAgICAgICAgICAgXCRQYXJhbXtVcGRhdGVOb3RpZnl9LCAgICAgIFwkUGFyYW17U29sdXRpb25UaW1lfSwgICAgICAgIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LAogICAgICAgICAgICBcJFBhcmFte0ZvbGxvd1VwSUR9LCAgICAgICAgXCRQYXJhbXtGb2xsb3dVcExvY2t9LCAgICAgICAgXCRQYXJhbXtWYWxpZElEfSwKICAgICAgICAgICAgXCRQYXJhbXtDb21tZW50fSwgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgICAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGdldCBuZXcgaWQKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBxdWV1ZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUXVldWVJRCA9ICcnOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFF1ZXVlSUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgcmVzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZTJRdWV1ZUJ5Q3JlYXRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1N0YW5kYXJkVGVtcGxhdGUyUXVldWVCeUNyZWF0aW5nJyk7CgogICAgIyBhZGQgZGVmYXVsdCByZXNwb25zZXMgKGlmIG5lZWRlZCksIGFkZCByZXNwb25zZSBieSBuYW1lCiAgICBpZiAoCiAgICAgICAgJFN0YW5kYXJkVGVtcGxhdGUyUXVldWVCeUNyZWF0aW5nCiAgICAgICAgJiYgcmVmICRTdGFuZGFyZFRlbXBsYXRlMlF1ZXVlQnlDcmVhdGluZyBlcSAnQVJSQVknCiAgICAgICAgJiYgQHskU3RhbmRhcmRUZW1wbGF0ZTJRdWV1ZUJ5Q3JlYXRpbmd9CiAgICAgICAgKQogICAgewoKICAgICAgICAjIGdldCBzdGFuZGFyZCB0ZW1wbGF0ZSBvYmplY3QKICAgICAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGFuZGFyZFRlbXBsYXRlJyk7CgogICAgICAgIFNUOgogICAgICAgIGZvciBteSAkU1QgKCBAeyRTdGFuZGFyZFRlbXBsYXRlMlF1ZXVlQnlDcmVhdGluZ30gKSB7CgogICAgICAgICAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZUlEID0gJFN0YW5kYXJkVGVtcGxhdGVPYmplY3QtPlN0YW5kYXJkVGVtcGxhdGVMb29rdXAoCiAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlID0+ICRTVCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgU1QgaWYgISRTdGFuZGFyZFRlbXBsYXRlSUQ7CgogICAgICAgICAgICAkU2VsZi0+UXVldWVTdGFuZGFyZFRlbXBsYXRlTWVtYmVyQWRkKAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgU3RhbmRhcmRUZW1wbGF0ZUlEID0+ICRTdGFuZGFyZFRlbXBsYXRlSUQsCiAgICAgICAgICAgICAgICBBY3RpdmUgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgc3RhbmRhcmQgdGVtcGxhdGUgaWQKICAgIG15ICRTdGFuZGFyZFRlbXBsYXRlSUQyUXVldWVCeUNyZWF0aW5nID0gJENvbmZpZ09iamVjdC0+R2V0KCcgU3RhbmRhcmRUZW1wbGF0ZTJRdWV1ZUJ5Q3JlYXRpbmcnKTsKCiAgICAjIGdldCBxdWV1ZSBkYXRhIHdpdGggdXBkYXRlZCBuYW1lIGZvciBRdWV1ZUNyZWF0ZSBldmVudAogICAgbXkgJVF1ZXVlID0gJFNlbGYtPlF1ZXVlR2V0KCBOYW1lID0+ICRQYXJhbXtOYW1lfSApOwoKICAgICMgdHJpZ2dlciBldmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnUXVldWVDcmVhdGUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgUXVldWUgPT4gXCVRdWV1ZSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJVF1ZXVlcyA9ICRTZWxmLT5RdWV1ZUxpc3QoKTsKCiAgICAjIGdlbmVyYXRlIGNoYWluZWQgdHJhbnNsYXRpb25zIGF1dG9tYXRpY2FsbHkKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUcmFuc2xhdGlvbnMnKS0+VHJhbnNsYXRlUGFyZW50Q2hpbGRFbGVtZW50cygKICAgICAgICBTdHJpbmdzID0+IFsgdmFsdWVzICVRdWV1ZXMgXSwKICAgICk7CgogICAgcmV0dXJuICRRdWV1ZUlEIGlmICEkU3RhbmRhcmRUZW1wbGF0ZUlEMlF1ZXVlQnlDcmVhdGluZzsKICAgIHJldHVybiAkUXVldWVJRCBpZiByZWYgJFN0YW5kYXJkVGVtcGxhdGVJRDJRdWV1ZUJ5Q3JlYXRpbmcgbmUgJ0FSUkFZJzsKICAgIHJldHVybiAkUXVldWVJRCBpZiAhQHskU3RhbmRhcmRUZW1wbGF0ZUlEMlF1ZXVlQnlDcmVhdGluZ307CgogICAgIyBhZGQgdGVtcGxhdGUgYnkgaWQKICAgIGZvciBteSAkU3RhbmRhcmRUZW1wbGF0ZUlEICggQHskU3RhbmRhcmRUZW1wbGF0ZUlEMlF1ZXVlQnlDcmVhdGluZ30gKSB7CgogICAgICAgICRTZWxmLT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJBZGQoCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgU3RhbmRhcmRUZW1wbGF0ZUlEID0+ICRTdGFuZGFyZFRlbXBsYXRlSUQsCiAgICAgICAgICAgIEFjdGl2ZSAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJFF1ZXVlSUQ7Cn0KCj1oZWFkMiBRdWV1ZUdldCgpCgpnZXQgcXVldWUgYXR0cmlidXRlcwoKICAgIG15ICVRdWV1ZSA9ICRRdWV1ZU9iamVjdC0+UXVldWVHZXQoCiAgICAgICAgSUQgICAgPT4gMTIzLAogICAgKTsKCiAgICBteSAlUXVldWUgPSAkUXVldWVPYmplY3QtPlF1ZXVlR2V0KAogICAgICAgIE5hbWUgID0+ICdTb21lOjpRdWV1ZScsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXVlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJRH0gJiYgISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSUQgb3IgTmFtZSEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBydW50aW1lIGNhY2hlCiAgICBteSAkQ2FjaGVLZXk7CiAgICBteSAkS2V5OwogICAgbXkgJFZhbHVlOwogICAgaWYgKCAkUGFyYW17SUR9ICkgewogICAgICAgICRDYWNoZUtleSA9ICdRdWV1ZUdldElEOjonIC4gJFBhcmFte0lEfTsKICAgICAgICAkS2V5ICAgICAgPSAnSUQnOwogICAgICAgICRWYWx1ZSAgICA9ICRQYXJhbXtJRH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkQ2FjaGVLZXkgPSAnUXVldWVHZXROYW1lOjonIC4gJFBhcmFte05hbWV9OwogICAgICAgICRLZXkgICAgICA9ICdOYW1lJzsKICAgICAgICAkVmFsdWUgICAgPSAkUGFyYW17TmFtZX07CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJXskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAjIHNxbAogICAgbXkgQEJpbmQ7CiAgICBteSAkU1FMID0gJ1NFTEVDVCBxLm5hbWUsIHEuZ3JvdXBfaWQsIHEudW5sb2NrX3RpbWVvdXQsICcKICAgICAgICAuICdxLnN5c3RlbV9hZGRyZXNzX2lkLCBxLnNhbHV0YXRpb25faWQsIHEuc2lnbmF0dXJlX2lkLCBxLmNvbW1lbnRzLCBxLnZhbGlkX2lkLCAnCiAgICAgICAgLiAncS5maXJzdF9yZXNwb25zZV90aW1lLCBxLmZpcnN0X3Jlc3BvbnNlX25vdGlmeSwgJwogICAgICAgIC4gJ3EudXBkYXRlX3RpbWUsIHEudXBkYXRlX25vdGlmeSwgcS5zb2x1dGlvbl90aW1lLCBxLnNvbHV0aW9uX25vdGlmeSwgJwogICAgICAgIC4gJ3EuZm9sbG93X3VwX2lkLCBxLmZvbGxvd191cF9sb2NrLCBzYS52YWx1ZTAsIHNhLnZhbHVlMSwgcS5pZCwgJwogICAgICAgIC4gJ3EuZGVmYXVsdF9zaWduX2tleSwgcS5jYWxlbmRhcl9uYW1lLCBxLmNyZWF0ZV90aW1lLCBxLmNoYW5nZV90aW1lIEZST00gcXVldWUgcSwgJwogICAgICAgIC4gJ3N5c3RlbV9hZGRyZXNzIHNhIFdIRVJFIHEuc3lzdGVtX2FkZHJlc3NfaWQgPSBzYS5pZCBBTkQgJzsKCiAgICBpZiAoICRQYXJhbXtJRH0gKSB7CiAgICAgICAgJFNRTCAuPSAncS5pZCA9ID8nOwogICAgICAgIHB1c2ggQEJpbmQsIFwkUGFyYW17SUR9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNRTCAuPSAncS5uYW1lID0gPyc7CiAgICAgICAgcHVzaCBAQmluZCwgXCRQYXJhbXtOYW1lfTsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgQmluZCAgPT4gXEBCaW5kLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBEYXRhID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJURhdGEgPSAoCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgICAgICAgPT4gJERhdGFbMThdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICREYXRhWzBdLAogICAgICAgICAgICBHcm91cElEICAgICAgICAgICAgID0+ICREYXRhWzFdLAogICAgICAgICAgICBVbmxvY2tUaW1lb3V0ICAgICAgID0+ICREYXRhWzJdLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+ICREYXRhWzhdLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+ICREYXRhWzldLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+ICREYXRhWzEwXSwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAkRGF0YVsxMV0sCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gJERhdGFbMTJdLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+ICREYXRhWzEzXSwKICAgICAgICAgICAgRm9sbG93VXBJRCAgICAgICAgICA9PiAkRGF0YVsxNF0sCiAgICAgICAgICAgIEZvbGxvd1VwTG9jayAgICAgICAgPT4gJERhdGFbMTVdLAogICAgICAgICAgICBTeXN0ZW1BZGRyZXNzSUQgICAgID0+ICREYXRhWzNdLAogICAgICAgICAgICBTYWx1dGF0aW9uSUQgICAgICAgID0+ICREYXRhWzRdLAogICAgICAgICAgICBTaWduYXR1cmVJRCAgICAgICAgID0+ICREYXRhWzVdLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICREYXRhWzZdLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+ICREYXRhWzddLAogICAgICAgICAgICBFbWFpbCAgICAgICAgICAgICAgID0+ICREYXRhWzE2XSwKICAgICAgICAgICAgUmVhbE5hbWUgICAgICAgICAgICA9PiAkRGF0YVsxN10sCiAgICAgICAgICAgIERlZmF1bHRTaWduS2V5ICAgICAgPT4gJERhdGFbMTldLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICREYXRhWzIwXSB8fCAnJywKICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAkRGF0YVsyMV0sCiAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJERhdGFbMjJdLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBpZiBkYXRhIGV4aXN0cwogICAgaWYgKCAhJURhdGEgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJGb3VuZCBubyAkS2V5IGZvciAkVmFsdWUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBxdWV1ZSBwcmVmZXJlbmNlcwogICAgbXkgJVByZWZlcmVuY2VzID0gJFNlbGYtPlF1ZXVlUHJlZmVyZW5jZXNHZXQoIFF1ZXVlSUQgPT4gJERhdGF7UXVldWVJRH0gKTsKCiAgICAjIG1lcmdlIGhhc2gKICAgIGlmICglUHJlZmVyZW5jZXMpIHsKICAgICAgICAlRGF0YSA9ICggJURhdGEsICVQcmVmZXJlbmNlcyApOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVEYXRhLAogICAgKTsKCiAgICByZXR1cm4gJURhdGE7Cn0KCj1oZWFkMiBRdWV1ZVVwZGF0ZSgpCgp1cGRhdGUgcXVldWUgYXR0cmlidXRlcwoKICAgIG15ICRTdWNjZXNzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVVwZGF0ZSgKICAgICAgICBRdWV1ZUlEICAgICAgICAgICAgID0+IDEyMywKICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdTb21lOjpRdWV1ZScsCiAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgIEdyb3VwSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcxJywgIyAob3B0aW9uYWwpIGRlZmF1bHQgJycKICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDEyMCwgIyAob3B0aW9uYWwpCiAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiA2MCwgICMgKG9wdGlvbmFsLCBub3RpZnkgYWdlbnQgaWYgZmlyc3QgcmVzcG9uc2UgZXNjYWxhdGlvbiBpcyA2MCUgcmVhY2hlZCkKICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDE4MCwgIyAob3B0aW9uYWwpCiAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA4MCwgICMgKG9wdGlvbmFsLCBub3RpZnkgYWdlbnQgaWYgdXBkYXRlIGVzY2FsYXRpb24gaXMgODAlIHJlYWNoZWQpCiAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA1ODAsICMgKG9wdGlvbmFsKQogICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gODAsICAjIChvcHRpb25hbCwgbm90aWZ5IGFnZW50IGlmIHNvbHV0aW9uIGVzY2FsYXRpb24gaXMgODAlIHJlYWNoZWQpCiAgICAgICAgU3lzdGVtQWRkcmVzc0lEICAgICA9PiAxLAogICAgICAgIFNhbHV0YXRpb25JRCAgICAgICAgPT4gMSwKICAgICAgICBTaWduYXR1cmVJRCAgICAgICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgRm9sbG93VXBJRCAgICAgICAgICA9PiAxLAogICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1NvbWUgQ29tbWVudDInLAogICAgICAgIERlZmF1bHRTaWduS2V5ICAgICAgPT4gJycKICAgICAgICBVbmxvY2tUaW1lT3V0ICAgICAgID0+ICcnCiAgICAgICAgRm9sbG93VXBMb2NrICAgICAgICA9PiAxLAogICAgICAgIFBhcmVudFF1ZXVlSUQgICAgICAgPT4gJycsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXVlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciAoCiAgICAgICAgcXcoUXVldWVJRCBOYW1lIFZhbGlkSUQgR3JvdXBJRCBTeXN0ZW1BZGRyZXNzSUQgU2FsdXRhdGlvbklEIFNpZ25hdHVyZUlEIFVzZXJJRCBGb2xsb3dVcElEKQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICEkUGFyYW17JF99ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkXyEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBGb2xsb3dVcExvY2sgMCB8IDEKICAgICRQYXJhbXtGb2xsb3dVcExvY2t9ID0gJFBhcmFte0ZvbGxvd1VwTG9ja30gfHwgMDsKCiAgICAjIERlZmF1bHRTaWduS2V5ICAgJycgfHwgJ3N0cmluZycKICAgICRQYXJhbXtEZWZhdWx0U2lnbktleX0gPSAkUGFyYW17RGVmYXVsdFNpZ25LZXl9IHx8ICcnOwoKICAgICMgQ2FsZW5kYXIgc3RyaW5nICAnJywgJzEnLCAnMicsICczJywgJzQnLCAnNScgIGRlZmF1bHQgJycKICAgICRQYXJhbXtDYWxlbmRhcn0gfHw9ICcnOwoKICAgICMgY29udGVudCAtPiB0aW1lIGluIHNlY29uZHMKICAgIGZvciBteSAkVGltZSAocXcoIFVubG9ja1RpbWVvdXQgRmlyc3RSZXNwb25zZVRpbWUgVXBkYXRlVGltZSBTb2x1dGlvblRpbWUgKSkgewoKICAgICAgICAkUGFyYW17JFRpbWV9ID0gJFBhcmFteyRUaW1lfSB8fCAwOwoKICAgICAgICBpZiAoICRQYXJhbXskVGltZX0gIX4gbXteXGQrJH1zbXggKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkVGltZSBpcyBub3QgbnVtZXJpYyEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjb250ZW50IGludGVnZXIgZnJvbSAwIC0gOTkKICAgIGZvciBteSAkTm90aWZ5IChxdyhGaXJzdFJlc3BvbnNlTm90aWZ5ICBVcGRhdGVOb3RpZnkgIFNvbHV0aW9uTm90aWZ5KSkgewoKICAgICAgICAkUGFyYW17JE5vdGlmeX0gPSAkUGFyYW17JE5vdGlmeX0gfHwgMDsKCiAgICAgICAgaWYgKCAkUGFyYW17JE5vdGlmeX0gIX4gbXteXGR7MSwyfX1zbXggKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkTm90aWZ5IG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgZnJvbSAwIHRvIDk5ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjbGVhbnVwIHF1ZXVlIG5hbWUKICAgICRQYXJhbXtOYW1lfSA9fiBzLyhcbnxccikvL2c7CiAgICAkUGFyYW17TmFtZX0gPX4gcy9ccyQvL2c7CgogICAgIyBjaGVjayBxdWV1ZSBuYW1lCiAgICBpZiAoICRQYXJhbXtOYW1lfSA9fiAvOjokL2kgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbnZhbGlkIFF1ZXVlIG5hbWUgJyRQYXJhbXtOYW1lfSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIHF1ZXVlIG5hbWUgZXhpc3RzCiAgICBteSAlQWxsUXVldWUgPSAkU2VsZi0+UXVldWVMaXN0KCBWYWxpZCA9PiAwICk7CiAgICBteSAlT2xkUXVldWUgPSAkU2VsZi0+UXVldWVHZXQoIElEID0+ICRQYXJhbXtRdWV1ZUlEfSApOwoKICAgICMgY2hlY2sgaWYgYSBxdWV1ZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cwogICAgaWYgKAogICAgICAgICRTZWxmLT5OYW1lRXhpc3RzQ2hlY2soCiAgICAgICAgICAgIElEICAgPT4gJFBhcmFte1F1ZXVlSUR9LAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtOYW1lfQogICAgICAgICkKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJBIHF1ZXVlIHdpdGggdGhlIG5hbWUgJyRQYXJhbXtOYW1lfScgYWxyZWFkeSBleGlzdHMuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgU1FMCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgVVBEQVRFIHF1ZXVlCiAgICAgICAgICAgIFNFVCBuYW1lID0gPywgY29tbWVudHMgPSA/LCBncm91cF9pZCA9ID8sIHVubG9ja190aW1lb3V0ID0gPywgZmlyc3RfcmVzcG9uc2VfdGltZSA9ID8sCiAgICAgICAgICAgICAgICBmaXJzdF9yZXNwb25zZV9ub3RpZnkgPSA/LCB1cGRhdGVfdGltZSA9ID8sIHVwZGF0ZV9ub3RpZnkgPSA/LCBzb2x1dGlvbl90aW1lID0gPywKICAgICAgICAgICAgICAgIHNvbHV0aW9uX25vdGlmeSA9ID8sIGZvbGxvd191cF9pZCA9ID8sIGZvbGxvd191cF9sb2NrID0gPywgc3lzdGVtX2FkZHJlc3NfaWQgPSA/LAogICAgICAgICAgICAgICAgY2FsZW5kYXJfbmFtZSA9ID8sIGRlZmF1bHRfc2lnbl9rZXkgPSA/LCBzYWx1dGF0aW9uX2lkID0gPywgc2lnbmF0dXJlX2lkID0gPywKICAgICAgICAgICAgICAgIHZhbGlkX2lkID0gPywgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPwogICAgICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgICAgICAgICAgXCRQYXJhbXtDb21tZW50fSwgICAgICAgICAgICAgXCRQYXJhbXtHcm91cElEfSwgXCRQYXJhbXtVbmxvY2tUaW1lb3V0fSwKICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0sIFwkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0sIFwkUGFyYW17VXBkYXRlVGltZX0sCiAgICAgICAgICAgIFwkUGFyYW17VXBkYXRlTm90aWZ5fSwgICAgICBcJFBhcmFte1NvbHV0aW9uVGltZX0sICAgICAgICBcJFBhcmFte1NvbHV0aW9uTm90aWZ5fSwKICAgICAgICAgICAgXCRQYXJhbXtGb2xsb3dVcElEfSwgICAgICAgIFwkUGFyYW17Rm9sbG93VXBMb2NrfSwgICAgICAgIFwkUGFyYW17U3lzdGVtQWRkcmVzc0lEfSwKICAgICAgICAgICAgXCRQYXJhbXtDYWxlbmRhcn0sICAgICAgICAgIFwkUGFyYW17RGVmYXVsdFNpZ25LZXl9LCAgICAgIFwkUGFyYW17U2FsdXRhdGlvbklEfSwKICAgICAgICAgICAgXCRQYXJhbXtTaWduYXR1cmVJRH0sICAgICAgIFwkUGFyYW17VmFsaWRJRH0sICAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgXCRQYXJhbXtRdWV1ZUlEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGdldCBxdWV1ZSBkYXRhIHdpdGggdXBkYXRlZCBuYW1lIGZvciBRdWV1ZVVwZGF0ZSBldmVudAogICAgbXkgJVF1ZXVlID0gJFNlbGYtPlF1ZXVlR2V0KCBOYW1lID0+ICRQYXJhbXtOYW1lfSApOwoKICAgICMgdHJpZ2dlciBldmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnUXVldWVVcGRhdGUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgUXVldWUgICAgPT4gXCVRdWV1ZSwKICAgICAgICAgICAgT2xkUXVldWUgPT4gXCVPbGRRdWV1ZSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyByZXNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgIHJldHVybiAxIGlmICRQYXJhbXtOYW1lfSBlcSAkT2xkUXVldWV7TmFtZX07CgogICAgIyB1cGRhdGVkIGFsbCBzdWIgcXVldWUgbmFtZXMKICAgIG15IEBQYXJlbnRRdWV1ZSA9IHNwbGl0KCAvOjovLCAkT2xkUXVldWV7TmFtZX0gKTsKCiAgICBmb3IgbXkgJFF1ZXVlSUQgKCBzb3J0IGtleXMgJUFsbFF1ZXVlICkgewoKICAgICAgICBteSBAU3ViUXVldWUgPSBzcGxpdCggLzo6LywgJEFsbFF1ZXVleyRRdWV1ZUlEfSApOwoKICAgICAgICBpZiAoICQjU3ViUXVldWUgPiAkI1BhcmVudFF1ZXVlICkgewoKICAgICAgICAgICAgaWYgKCAkQWxsUXVldWV7JFF1ZXVlSUR9ID1+IC9eXFEkT2xkUXVldWV7TmFtZX06OlxFL2kgKSB7CgogICAgICAgICAgICAgICAgbXkgJE5ld1F1ZXVlTmFtZSA9ICRBbGxRdWV1ZXskUXVldWVJRH07CiAgICAgICAgICAgICAgICAkTmV3UXVldWVOYW1lID1+IHMvXFEkT2xkUXVldWV7TmFtZX1cRS8kUGFyYW17TmFtZX0vOwoKICAgICAgICAgICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICBVUERBVEUgcXVldWUKICAgICAgICAgICAgICAgICAgICAgICAgU0VUIG5hbWUgPSA/LCBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/CiAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkTmV3UXVldWVOYW1lLCBcJFBhcmFte1VzZXJJRH0sIFwkUXVldWVJRCBdLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlc2V0IGNhY2hlCiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbXkgJVF1ZXVlcyA9ICRTZWxmLT5RdWV1ZUxpc3QoKTsKCiAgICAjIGdlbmVyYXRlIGNoYWluZWQgdHJhbnNsYXRpb25zIGF1dG9tYXRpY2FsbHkKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUcmFuc2xhdGlvbnMnKS0+VHJhbnNsYXRlUGFyZW50Q2hpbGRFbGVtZW50cygKICAgICAgICBTdHJpbmdzID0+IFsgdmFsdWVzICVRdWV1ZXMgXSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBRdWV1ZUxpc3QoKQoKZ2V0IGFsbCBxdWV1ZXMKCiAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3QoKTsKCiAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3QoIFZhbGlkID0+IDEgKTsKCj1jdXQKCnN1YiBRdWV1ZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNldCB2YWxpZCBvcHRpb24KICAgIG15ICRWYWxpZCA9ICRQYXJhbXtWYWxpZH07CiAgICBpZiAoICFkZWZpbmVkICRWYWxpZCB8fCAkVmFsaWQgKSB7CiAgICAgICAgJFZhbGlkID0gMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRWYWxpZCA9IDA7CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ1F1ZXVlTGlzdDo6JyAuICRWYWxpZDsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICV7JENhY2hlfSBpZiAkQ2FjaGU7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIHNxbCBxdWVyeQogICAgaWYgKCRWYWxpZCkgewogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHF1ZXVlIFdIRVJFIHZhbGlkX2lkIElOICIKICAgICAgICAgICAgICAgIC4gIiggJHtcKGpvaW4gJywgJywgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCkpfSApIiwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBuYW1lIEZST00gcXVldWUnLAogICAgICAgICk7CiAgICB9CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlUXVldWVzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFF1ZXVlc3sgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlUXVldWVzLAogICAgKTsKCiAgICByZXR1cm4gJVF1ZXVlczsKfQoKPWhlYWQyIFF1ZXVlUHJlZmVyZW5jZXNTZXQoKQoKc2V0IHF1ZXVlIHByZWZlcmVuY2VzCgogICAgJFF1ZXVlT2JqZWN0LT5RdWV1ZVByZWZlcmVuY2VzU2V0KAogICAgICAgIFF1ZXVlSUQgPT4gMTIzLAogICAgICAgIEtleSAgICAgPT4gJ1VzZXJDb21tZW50JywKICAgICAgICBWYWx1ZSAgID0+ICdzb21lIGNvbW1lbnQnLAogICAgICAgIFVzZXJJRCAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBRdWV1ZVByZWZlcmVuY2VzU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWxldGUgY2FjaGUKICAgIG15ICROYW1lICAgICAgPSAkU2VsZi0+UXVldWVMb29rdXAoIFF1ZXVlSUQgPT4gJFBhcmFte1F1ZXVlSUR9ICk7CiAgICBteSBAQ2FjaGVLZXlzID0gKAogICAgICAgICdRdWV1ZUdldElEOjonIC4gJFBhcmFte1F1ZXVlSUR9LAogICAgICAgICdRdWV1ZUdldE5hbWU6OicgLiAkTmFtZSwKICAgICk7CiAgICBmb3IgbXkgJENhY2hlS2V5IChAQ2FjaGVLZXlzKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5RdWV1ZVByZWZlcmVuY2VzU2V0KCVQYXJhbSk7Cn0KCj1oZWFkMiBRdWV1ZVByZWZlcmVuY2VzR2V0KCkKCmdldCBxdWV1ZSBwcmVmZXJlbmNlcwoKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVQcmVmZXJlbmNlc0dldCgKICAgICAgICBRdWV1ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgUXVldWVQcmVmZXJlbmNlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fS0+UXVldWVQcmVmZXJlbmNlc0dldCglUGFyYW0pOwp9CgpzdWIgREVTVFJPWSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgZXhlY3V0ZSBhbGwgdHJhbnNhY3Rpb24gZXZlbnRzCiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyVHJhbnNhY3Rpb24oKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIE5hbWVFeGlzdHNDaGVjaygpCgpyZXR1cm4gMSBpZiBhbm90aGVyIHF1ZXVlIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzCgogICAgJEV4aXN0ID0gJFF1ZXVlT2JqZWN0LT5OYW1lRXhpc3RzQ2hlY2soCiAgICAgICAgTmFtZSA9PiAnU29tZTo6UXVldWUnLAogICAgICAgIElEID0+IDEsICMgb3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgTmFtZUV4aXN0c0NoZWNrIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBpZCBGUk9NIHF1ZXVlIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRGbGFnOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0lEfSB8fCAkUGFyYW17SUR9IG5lICRSb3dbMF0gKSB7CiAgICAgICAgICAgICRGbGFnID0gMTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCRGbGFnKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCj1mb3Igc3RvcHdvcmRzIHJvIHJ3Cgo9aGVhZDIgUXVldWVMaXN0UGVybWlzc2lvbigpCgpHZXQgdGhlIHBlcm1pc3Npb24gZm9yIGEgbGlzdCBvZiBxdWV1ZXMuClJldHVybnMgbm90aGluZyBpZiB0aGUgdXNlciBoYXMgbm8gJ3JvJyBvbiBhbnkgcXVldWUsICdybycgaWYgdGhlIHVzZXIgaGFzIG5vICdydycgb24gYXQgbGVhc3Qgb25lIHF1ZXVlCmFuZCAncncnIGlmIHRoZSB1c2VyIGhhcyBmdWxsIHBlcm1pc3Npb24gb24gYWxsIHF1ZXVlcy4KCiAgICBteSAkUGVybWlzc2lvbiA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICBRdWV1ZUlEcyA9PiBcQFF1ZXVlSURzLCAgICAgICMgb3B0aW9uYWwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBEZWZhdWx0ICA9PiAncncnLCAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0ICdybycgKHJvfHJ3KSBmYWxsYmFjayBwZXJtaXNzaW9uIGlmIG5vIHF1ZXVlcyBnaXZlbgogICAgKTsKCj1jdXQKCnN1YiBRdWV1ZUxpc3RQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJVJvUXVldWVzID0gJFNlbGYtPkdldEFsbFF1ZXVlcyggVXNlcklEID0+ICRQYXJhbXtVc2VySUR9ICk7CiAgICBteSAlUndRdWV1ZXMgPSAkU2VsZi0+R2V0QWxsUXVldWVzKAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJ3J3JywKICAgICk7CgogICAgIyAncm8nIGlzIHRoZSBkZWZhdWx0IHBlcm1pc3Npb24gaWYgbm8gcXVldWUgaXMgZ2l2ZW4gYW5kIHBhcmFtZXRlciAnRGVmYXVsdCcgaXMgbm90IHNldC4KICAgIG15ICREZWZhdWx0UGVybWlzc2lvbiA9ICRQYXJhbXtEZWZhdWx0fSB8fCAncm8nOwoKICAgIHJldHVybiAkRGVmYXVsdFBlcm1pc3Npb24gaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSggJFBhcmFte1F1ZXVlSURzfSApOwoKICAgICMgZmluYWwgcGVybWlzc2lvbiBpcyBydyBvciAnJyBpZiBhbGwgYXJlIG9mIHRoYXQga2luZCwgZWxzZSBybwogICAgbXkgJFBlcm1pc3Npb247CiAgICBRVUVVRToKICAgIGZvciBteSAkUXVldWVJRCAoIEB7ICRQYXJhbXtRdWV1ZUlEc30gfSApIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQZXJtaXNzaW9uICkgewogICAgICAgICAgICBpZiAoICRSd1F1ZXVlc3skUXVldWVJRH0gKSB7CiAgICAgICAgICAgICAgICAkUGVybWlzc2lvbiA9ICdydyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUm9RdWV1ZXN7JFF1ZXVlSUR9ICkgewogICAgICAgICAgICAgICAgJFBlcm1pc3Npb24gPSAncm8nOwogICAgICAgICAgICAgICAgbGFzdCBRVUVVRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRQZXJtaXNzaW9uID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2lmICggJFBlcm1pc3Npb24gZXEgJycgKSB7CiAgICAgICAgICAgIGlmICggJFJ3UXVldWVzeyRRdWV1ZUlEfSB8fCAkUndRdWV1ZXN7JFF1ZXVlSUR9ICkgewogICAgICAgICAgICAgICAgJFBlcm1pc3Npb24gPSAncm8nOwogICAgICAgICAgICAgICAgbGFzdCBRVUVVRTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzaWYgKCAhJFJ3UXVldWVzeyRRdWV1ZUlEfSApIHsKICAgICAgICAgICAgJFBlcm1pc3Npb24gPSAncm8nOwogICAgICAgICAgICBsYXN0IFFVRVVFOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFBlcm1pc3Npb247Cn0KCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCgo9aGVhZDIgUXVldWVTaWduYXR1cmVNZW1iZXJMaXN0KCkKCmdldCBxdWV1ZXMgYXNzb2NpYXRlZCB0byBhIHNpZ25hdHVyZQoKICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU2lnbmF0dXJlTWVtYmVyTGlzdCggU2lnbmF0dXJlSUQgPT4gMTIzICk7CgpSZXR1cm5zOgogICAgJVF1ZXVlcyA9ICgKICAgICAgICAxID0+ICdTb21lIE5hbWUnLAogICAgICAgIDIgPT4gJ1NvbWUgTmFtZScsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXVlU2lnbmF0dXJlTWVtYmVyTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2lnbmF0dXJlSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnR290IG5vIFNpZ25hdHVyZUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRWYWxpZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpOwogICAgbXkgJERCT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgbXkgJENhY2hlS2V5OwoKICAgICMgY2hlY2sgaWYgdGhpcyByZXN1bHQgaXMgcHJlc2VudCAoaW4gY2FjaGUpCiAgICAkQ2FjaGVLZXkgPSAiUXVldWVzU2lnbmF0dXJlczo6JFBhcmFte1NpZ25hdHVyZUlEfSI7CiAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAleyRDYWNoZX0gaWYgcmVmICRDYWNoZSBlcSAnSEFTSCc7CgogICAgIyBnZXQgcXVldWVzCiAgICBteSAkU1FMID0gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHF1ZXVlIFdIRVJFIHNpZ25hdHVyZV9pZCA9ID8gQU5EICIKICAgICAgICAuICIgdmFsaWRfaWQgSU4gKCAke1woam9pbiAnLCAnLCAkVmFsaWRPYmplY3QtPlZhbGlkSURzR2V0KCkpfSApIgogICAgICAgIC4gIiBPUkRFUiBCWSBuYW1lIjsKCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJFNRTCwKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U2lnbmF0dXJlSUR9IF0KICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlUXVldWVzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFF1ZXVlc3sgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICAjIHN0b3JlIHF1ZXVlcyAoaW4gY2FjaGUpCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVRdWV1ZXMsCiAgICApOwoKICAgIHJldHVybiAlUXVldWVzOwp9Cgo9aGVhZDIgUXVldWVBdXRvUmVzcG9uc2VNZW1iZXJMaXN0KCkKCmdldCBxdWV1ZXMgYXNzb2NpYXRlZCB0byBhbiBhdXRvIHJlc3BvbnNlCgogICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVBdXRvUmVzcG9uc2VNZW1iZXJMaXN0KCBBdXRvUmVzcG9uc2VJRCA9PiAxMjMgKTsKClJldHVybnM6CiAgICAlUXVldWVzID0gKAogICAgICAgIDEgPT4gJ1NvbWUgTmFtZScsCiAgICAgICAgMiA9PiAnU29tZSBOYW1lJywKICAgICk7Cgo9Y3V0CgpzdWIgUXVldWVBdXRvUmVzcG9uc2VNZW1iZXJMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtBdXRvUmVzcG9uc2VJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdHb3Qgbm8gQXV0b1Jlc3BvbnNlSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFZhbGlkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7CiAgICBteSAkREJPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGdldCBxdWV1ZXMKICAgIG15ICRTUUwgPSAiU0VMRUNUIHEuaWQsIHEubmFtZSAiCiAgICAgICAgLiAiIEZST00gcXVldWUgcSwgcXVldWVfYXV0b19yZXNwb25zZSBxYXIgV0hFUkUgIgogICAgICAgIC4gIiBxYXIuYXV0b19yZXNwb25zZV9pZCA9ID8gQU5EICIKICAgICAgICAuICIgcWFyLnF1ZXVlX2lkID0gcS5pZCBBTkQgIgogICAgICAgIC4gIiBxLnZhbGlkX2lkIElOICggJHtcKGpvaW4gJywgJywgJFZhbGlkT2JqZWN0LT5WYWxpZElEc0dldCgpKX0gKSIKICAgICAgICAuICIgT1JERVIgQlkgcS5uYW1lIjsKCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJFNRTCwKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17QXV0b1Jlc3BvbnNlSUR9IF0KICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlUXVldWVzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFF1ZXVlc3sgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICByZXR1cm4gJVF1ZXVlczsKfQoKIyBFTyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwoxOwo=</File>
        <File Location="doc/en/LightAdmin-AutoRepliesAndSignatures.pdf" Permission="644" Encode="Base64">JVBERi0xLjUKJeTw7fgKNCAwIG9iago8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCA4MjgvSGVpZ2h0IDI1My9Db2xvclNwYWNlL0RldmljZUdyYXkvQml0c1BlckNvbXBvbmVudAo4L0RlY29kZVBhcm1zPDwvQml0c1BlckNvbXBvbmVudCA4L0NvbG9ycyAxL0NvbHVtbnMgODI4L1ByZWRpY3RvciAyPj4vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aAoyNDQzPj4Kc3RyZWFtCnja7d2LddpYAgZgUkGYCqKtIGwFZisIqWCYCsJUsGwFw1QwuIJlKli5gpUrGKhgTQVZJ465AoORhB7X6PvOmXMSGzsaSf/VfWswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgF5LktEwSR7/kC3WNf3K8TSp/LOr5cN1nufZ5PxnsodsnTV5EE9XJh2s19mDW/+yUzke34S/bcf1XLflz5f89P34Gq/qMP1Y8JPb1WrV1FHkr8wmS9NMBKpdzcnk0+FlS+q4bef/vOzn70dXeLbTmxIf3i4WjZQfk38ffGGTLlNJKP/wPvZw+HVRw69+eH/hL/jH9V3P0X/LfX47XzRwFNmRZ99muVyLQwnT+YejX//XvIb201+X/oY6jiK2ouo/ZX/iblL/o+fr8S/fzqXn0uTEkp1fF7JTX+vzfHakp/BlnJ+uev+yrOEfWH+48Bf8PZOdRsKz+nTyW7/P9bud7SGYfzn9zc2ojhP4okVatrYyHshOI+F57Si205V0vH72lq88FDaTeq7V7LeLojN5kJ06y7J8bf2PV77559Sj5xWnuo/vBoOHbL2q69wlk+GJ7+z+/bv0VL3iKsccQnZuT7csRsPkoGS7ndZ8HMl08PhUTz40WnZeZX1t+bK+u02ztMUh5q919kq8yey83gGfjKd7rdGmuutHyXj8saH27lVG58XQdpND2LJTJTvfPrr42E7b78jg+OD3mZwcK2rSgzHLu2X7pYzsFHiS5GfONDtOnEynTdcSrzE6d/O0g6OQnSJhyIWn8Xv5cLBPeM5FZzNNOzkM2Sn0IMnNfnvXeFV+NnsvPMXbOp3dubJTKDtJtrudPzffIk2WN8Jz2t4swPtpZ32RslOsARNqba2cqNk8/+jR23aq9Tm4nXU3BiY7xbIT5l23M8titMq3eq5wInv19uAfMdTXZKfEfbmbFLhJ2q/U17OO6yrkas9dP5Blp2B2Qm/Bu3aOcLjKNXqucUphNfk1ix3XZWWnYHbC7Kl3bR1jfpb1FS4DqdYQ/C2eZmBfsxOuQbzZyVfbtqO14DyeknWosXU+5aKv2QlRiDc7e+H5cyI5e31s3VdjZSfi7OwNoOtr21sCHUH3iewUvCcXXzrITr5DVnfB3mMngqJEdsr2s22HbR5nrr/Agyf32IlhroXslB3fabf8zzWOPXjCYyeKAS/ZKZadUOS13L2Tq7X1/cGTK0eiuFtlp9gdGW7hzy2vTgwzH/s+JzRcg00ykJ03k50wnP1Ty7WF3K4kP/V7Zk4oReIYKZadQtkJN3D7rY5wy/R7PnWoNkcyvU92Sq59a//+DVWVfo+PhqkgkWziIDtFshM+3UWRF/bi73WlLXTXR7JP7dee1gfCXqkFLkSur6uLIiYMy/a60vY1rp6C3LDF39b9rDyfH+ocLsJodic17bDurs89baHJGcu+W8/lb+/2AXuuAZztstnb9bibDp5dAXeVbxEr3dyJZpzrqULQv62PfywtO1NmJJNpfmOJjob2w3h6jxs84SS8i+aYksd6QJr28GJMHgvxg1esTcf7VenR/hZ6tW/lXlBob/V4asGuq9PcpHgfRSc18PKqko2zPi8f/Rpbc4cX1df4ouO+2TsHlp/HfHWOR6fDVc/qK+U3mKCTq3PcZr7s6tB2w4KyIztvMTuPd+60o0fPbl5Duwvv4rw679yq8Xl4f+4TXb0DtJPNEuIS+hpl5+31FXzXzayYMC7Y2xtH8RG3vV3CYwqPCkuk2RmPs2zdw6sxHI8O3+w6PXin8bF36HbRVJWdKOtsT9O1ejhu8L0g287OPEaGo/F4f8S0i+mg6mwxFh/Pc3R7F57nOkCB7QeG01n++dPBCjSV/Vx2Ilm9kxt169kahOH/fvxhkxQq+PPvkmq/1qaPOsbxnb6ufQuXolihMVqG+dTtD1AaG41xTo411wWLsfy+6q2XfObkxDinT3aKBiG3r3rryzfNBY2x/JCdwg+R0NnVdqsjLLru8Rzi+Na+yU7xCthu6XPbe4Na+7ZXdH1eyc5by064ei2fLGuu9x6+sVRcZad4dsLyzZar3LtJqn3e6yOchU0iO28tO62/J/6HsJdcr5cbx7u3oeyUuXqtNldDlS2Wmn4nQqsvkh4T2SmRnY6mxoTNsHs9/X43FSSWcXzZqZSdVmcw7bLT83dd7x77kcwfk51K2Wm1r3j3z/b7HSK7eVSxFCHtZOfbuph0cVH/6nQ6yi78FW81O8/vCux1L9v3e2Dx7UREs4dtK9l5auxetL/Z0wucNuO6ntaVpuV2tRRgtPrWwXc/fuh5dgbD6fAhjWUJQivZee4gueDiP28lUNvASqXshA0NWm60D0fjQbYaEJU2srN76V/lOZShe7KuZmKl7OjwouXshP02KzZ2c1OY62poVMrO7n/EduK0nZ1q4UmysGizy+yE8f2+v62dtrIThuMrhSe/6qy2jTaqZCeM7/e8s5jWsrO3WW3p2y6/2rm+o6yQnTAVtG+bO9BZdnJ9u+XDk2vr1NnOqJCd0FPQ+4EWWsvOXq2tXGPhaTis7hpblezkNg31Bhhay06+yfJYbE+KVnnyr5iu9+VRpbOz7Phl1/Q0O3tdZY8337xYwb33iul6W+gls9NMowvZKdtseXz0zM7fscl8f2v1Wju3SmVn/0g8dmg1O4fhGdzNX79nh7PZ++aiUyI7yWRy0+CBIDulwzO4W5yeoTWaHb7Oo+Y7NmTn9rXGV5KMDl9o1fNFNHSQnf02w1PtZ7lKj5b00xefnNUbnQIvSDzBbGbaz85guLp58bVtmmb5l+CMRqPJy5fe1P969qrZER26yM7BIGkuGtngIRsMR0ffFfWtdjep/YatmB3RoaPsHPY6F9PEoVXLTjRLFokpOy2NlQ/nX0r+xP20iYWCVbJTdFiKfthtttjafnHjxccI7tewQ2thtzMPHY60QNqc3jidF624bReLpu7X7GOpj29X87W7hb061NNMs82k1R0UiqWnweQcGW56xSZd2SyAl2aTWjdvKlpzm/58rp2zWDV6UMP56OZceB8LlPU6yzxxiOuJN5l8Oh2c5coNC6fjMx4fKfvvszQVHDjf8BiOH/97+nM6yB5SpwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDL/B9n0iy4KZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8L0NvbG9yU3BhY2UvRGV2aWNlUkdCL1NNYXNrIDQgMCBSL1R5cGUvWE9iamVjdC9TdWJ0eXBlL0ltYWdlL1dpZHRoIDgyOC9IZWlnaHQgMjUzL0JpdHNQZXJDb21wb25lbnQKOC9EZWNvZGVQYXJtczw8L0JpdHNQZXJDb21wb25lbnQgOC9Db2xvcnMgMy9Db2x1bW5zIDgyOC9QcmVkaWN0b3IgMTU+Pi9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoCjE4NDg+PgpzdHJlYW0KeNrt3Gtu2zoQgNG48JK6/xVkT6qBAEZao7FEkeLM8Bz0133gOpRIfqJyfdu27QMAgNh+GQIAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQBAtAEAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgAg2gAAEG0AAIg2AADRBgCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAABEGwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AADRBgCAaAMAQLQBABRzNwSF3W6/f/4Htu1zzR88rKpXBNPHzW8Zp8P9sG2bUVh5wa034fMWmyUYc8cUsJ7zAydtqy+1j3+30jzPXmzAcxYvniANq5mhK8/vtKWf1TLFSg0lbzxz4eTWYADrcdJmhTUmQOhJ7dzIAPLFSVvWRyjjAHgew64h2jDxUvI0CboNO4how2RDeoJuM4yINubNsWKJoHjAYmg1cwog2lBsum34JxedwDWrmW5LmQS+XHeFXJMC4y6EsWWRBWfQrd6w0Jl0HTcIg5mLr/yoOSHNQyCF52Ll4Kd5kff96qKNlMVm7gGpK2TP6qcz+oav8UzE77QVKTa/DgVU6g+aN4KGMXTMKdq4qNjkGqDbODmGuk20MXbOyDXAakmvDcKoijY8jAJY33Kkm24TbfSfKlY0AEZsGbpNtNFtknglCugMdJtoI0GxGS4AdLBow3wDoPI+snMrcdgm2mifGIoNgIDbE6LNlFBsAAxhTxFtmF0AlNpZHLaJNkwGAJwIINpMKgDotMU4XxBt7JoGig0AEG0A5H6y5TyHbaKNDhPAMRsAQboN0YYpBEACDttEGwC0JIIn276Mp2jD8woAINo88QB4suWqrcd1EW0AcKwMPNmyrLshyPWsA1ByaXKQA285aQv3EImdDFa7mfevjSadBU20ARYyuHoKPFrt64/JmIJzh+m8HhUH7Lo0/6xWLhZVl6DmW92ODqINJDWEvtWvyTVzELweBcBTE8ZZtAGAkgDRlotf+ACsbBZPEG0AVE5D6QaiLQrn/4C16226GXBEGwAkoNsQbQDQ6OIXBbqNZfmeNmjZKrzOZoX7fP+t/voF1KM/pDmIaAN2PdnbM3Crv3Zbl/+iboP/8XoUGjcV72hwq5/3CK/nH5cARFvu5RJXDRa5mY/WmwmIaAOAmXnk1A1E2/yHSIMA0HHBdNiGaAMAD7og2gBAt8Xj5FK0AcCobtMZiDY84gAAog0ASMXbatHmjgfAyjmftz2iDXMGABBtAMB4zjtFGwCc5R0Fog0PKwBAFHdDIOmgr9djj6Q3dpkfBOxNNThpc/fD2ND5yPn2qswPYlHFMIo2Os+Nx18xYShZbBlzR5xhb7I3BeT1qGca4ECxPf6uyYu9iSmctAEhYsiHBBBtgCRSbG4bEG0AJTZgZQCINoDoebT/I/mNH3cLiDYgvf1BE2onVmyL3HUg2gASd5uDnMhcHfjOV34Ak7fkWSclR4PAiY5ig7mctAGdHY2bKXuzYgueazsvkOvCUpy0AUO67VAVXXnk1tCIyiBsTINoA7i62y5It7YgUGxhW82lQbQBTOu2QenWfH4jC86P4bi7y0VBtAFM7rbviXBmbz7ZGbIAEG2AbmsMr7ch1etASLEFv6kMAqINYNQW2yWnrnlJpwkUGwTkKz8Ae+1fH1ITuItAtAF23E8fDz0NbbweBSaEkf8VERcIjnLSBjaSOUMXZ/Rcx8iD4IANnpy0AZNDYeKpmxoQkZDIbds2owDvp8pLWNhURo+wJih/FVwXEG2AaNAEQDVejwKBPKOqb71pNUC0AYytt7aGU2mAaAOY33AAC/KVHwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AABEGwCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAAAQbQAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAACiDQBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAADRBgAg2gAAEG0AAKINAIBI/gCkqoRBCmVuZHN0cmVhbQplbmRvYmoKOCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDM0Nj4+CnN0cmVhbQp42nVSy07EMAy88xX+gWZtx3lYqnpAPAS3Fb0hDu12y4UV2hO/j5N02QOg1nLsxDMeJ3AGArSPILH9CIeTRY9m7//6MzjV6OHLok6dxAAnkJgvwQe8wP6PKtLsjMJrZYxYAmLgqI6tOCUXQywN7J5OCHefBnI7wu6BgMWlnAjGFbITtcNE3gVmGJfXHjFOSOKRfDI7Ik0LIgoSWRyl7cWILFLyA2GPNIdybgi2tD5w0rokq9aIFOZWVeKJGpohFESc6cpmOVx9ZayIqgNzf6kb3sbnKoCSYwpSBHjJLpBAx8llDZsCo5etLMytQToOne83eGox57JzPFRjXs3Pm18qWSfoiNUGJOww5Cv8JrR2WmZUlapBJrUDmasus40Exfaob/PDFTHgVQ05DYHrdbCJsfvggM7bm2h0mYcuFwlYZ3xpe97ann4yy5Y1v7Zp3Y+/Xs7+5htiZZZKCmVuZHN0cmVhbQplbmRvYmoKMTIgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAzND4+CnN0cmVhbQp42lMoVDBUMABCQwVzIyAyUEjOBfLcgTidIB3IBQCH6gxHCmVuZHN0cmVhbQplbmRvYmoKMjYgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA2NjY+PgpzdHJlYW0KeNrtWD1v2zAQ3fsr+AfE3ge/DjA4FGgDdEvrregQW1KWZkiX/v0eJVmyGQdOE3eKYFukaPnuHnmP72jzaNCAvtBE0jeY/YPe3ejn/kn7aWs+fkGDzrILZLa9YSFL4k0To40gZtv+2AAQAiQCiAFg1wEwLv0d5p/br+bz1oAlSHrl6PTqUjDfbs4M/p79ipVAobgF02AUy5RGj9jtc4PIoThPuUk6hB3gHWoLgCKAjrUNOtaOfcWKIczBnEJcXLnghmCeOrwKDA3CkvMHq21uJLhNmSbA1mXZjCDu2uwnTMHlhmL5QiQTTqOSAHd+QqnjND89tQNynaTR4gtgk01PwuteCZqPLGv2iNP5JGRLM24g6qdl9CVGcCmnESMqFuh5wbLvxtUrq+rTWSjHDiVaF/nEoTrLjROZeh5g7b2v3qWkGfIfpUrTrv7dNXhA3qIPNRMKVykp6eEuZDcxoOxlmvGHW46ZYN7qLhMBbEip8vjsVK30WEnxLClOc/a/0IKjRcSaFp3SgrkoghYTyN2ieIMSRiDnBp0fCFIUouh9O2gmTWJatINDbngzaqIrHNqr5QOvFmG9OCXoNN5Qx7sS6D2Q4DRD30qCujD0YoFksd5ITKW8hTFHSyK7QRI0tROMVfdU1OrzYVCHuBmrwuMq6p/rX63wmeqAerhS/ZtA+T7vJLoQUUqkoCyGfoyyIFCeviRSZqxt9nTNolXPOwJzPdAfl61cL4LO9Kzaz8R/7COxmq59rDvJ2nvlHsVS5+sRFa4n1AzOJh9rSgz1q5QDedsux9FBkPHiBnSOFid+VlqsvTfQ4jRnz9Biah+NZUne/ClSFYK3kZ15UDtpuf1lvpvbc2rkbXDqK8RoUzr8b+S49nX74S8HK03uCmVuZHN0cmVhbQplbmRvYmoKMjkgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMTA+PgpzdHJlYW0KeNpTKFQwVDAAQkMFcyMgMlBIzgXy3IE4HSddqKBnbGlhqlAO5OmamZnqmRubKOQqmJhZILg5CsEKgQpOIQr6boYKlnqWZkZmCiFpYA3m5noWFhYKISnRNgaGJsYgbBcb4qXgGgK3IZALAFfEH9UKZW5kc3RyZWFtCmVuZG9iagozMiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDM3Mz4+CnN0cmVhbQp42nWSwU7DMAyG7zyFX6DBThwnkaoekACJ20RviENLWy7ssBOvj5M2W8e0rlPj5PfvL4nhBASoP4Jg9UX4Omr0qv/vm+8JTEri4FejJhkWD0dgiTX4gXc4wFMPjy8EySSxAv0CbJ1hF6CxwcTkoZ8+WkRLiB71YcRBEMcZ0enckLrP/q1YEBvHYrOHDpNltXAmEW0W0SIGyWkl5bm/JhRrrISKuEVXjLsCLnhDItAQipHKGFemkVbeISmzv/Dm8QqxMbvdtpuzpQ8mRN481U8nEReHhAuSH7vUItHc6flYHQ0TkpvrjNMUGZBY5S6sK6rIx0aksfC6JrKpSTmLedoVyQo/rt/sP3FVO0HSa6eU6sxtfd3+uX5Fz6rRlzxLe/6yqiqlq/nIZYtZPkydb3PFqtbr5pKua1SgC042yPHlWDJojri9B1AyrF1qM+za1qXot6YQb4Ljc1ds4b3WFe2QoH0nQXs3xvUOaf76X+Pw8Adir7irCmVuZHN0cmVhbQplbmRvYmoKMzUgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyOTE+PgpzdHJlYW0KeNptkb1OxDAMx3eewi/QYDuJk0hVBiRAYjvRDTG0d9dbuOEmXh/noz0kUBPFH/nbzc9wAwLUjyCwLoTjVb1X3Zf9fJrg8YUgmSQsMK0a5GhcsjCdPkZEmZGcRbJB9xlpPiGiQyL1xbWcCLJzJZ7TiLT4ci17NbUpzqmapOIkSH5pouLP1IppgVIQF7o30xiutjasFVPKzOOuY57zwEH7lQauJ/ySCaudBzv2AtR8jiVzPtbNvOq59POUP6c3eJ7gBsam6OG7YHAmYIArOImb8wXvcPjD8LdqEPEmWNd1u9uU/9AeJAQTY2y8t3+xPhnRIWAfA1PFXx9UKHa+FWrqIPq78iDeFUnMQ7wDI2WtdxvgVqLZOiOFvRHY3nR4+AHd3H/2CmVuZHN0cmVhbQplbmRvYmoKMzggMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA0ODE+PgpzdHJlYW0KeNq1lL9uGzEMxvc+BV/AKilS/4BAQ4E2QLe0txUd7LtzlmZIl75+P+nukthOgAyObVmmTiY//kSRHkmI8RZKHh+m8QHWLcb9xfxIrpSo9A/WrjiLgR7IYt6MP/ST7ujLQJ+/CRVXoo80HMm8OtNEO59cLoGG6dcNsxfmwHgZ8z4yH2Zmxdq+1N/D9+5CzKlF33yIOC4KF+qKyOriMNedMH5MczVM2fe/fh1OlUbvfEyb1NU60foikDK7nIXgOLq4BZIqLcBs1YduP+tNVpFYuWnK1wwy84jUQnheS7bOa6bwuEp9guwEuBjiFN8ahX7cvrL49/4V0UhS0vK8C5Z5Yu+PmMeLMFcIh0OIIZ3FZMsVFKSUKh7mUVmiscjMMmKgtvCMJeRzST2AvigYpONxDJtjHKuU5bg9dxvVw30d5H1Ld+xjSfmwzJNembDX4hJfEJ4+hHDEPjuLiWvSy7yRRSk1kpupqaPpsPfyLsAxuWLrZfRmV4alnFywdA5r/hBYwZUG6yRmu2WiGKa9Jn2rExQsUoUdF2ytHvcTamW7w4C3VKrGutNmT3VnjeyIXrPRbu6k034PadXgUpE3SaNXaclh7VURm9WemtVqvtVZ0czaroTGmvMG+0LV3af/o3NIqQplbmRzdHJlYW0KZW5kb2JqCjQxIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMzA1Pj4Kc3RyZWFtCnjabZG/TsQwDMZ3nsIv0GA7/6UqAxIgsZ3ohhjaa3sLN9zE62MnbTkJ1EaO436fm5/hBgQoD0FkeRHOV8leZV2O+DTA4wtBNjlwgGGVQ07GZQvD/NEjhhHJWSQbZS1I44yIDokkD67VQkB2Ts9L7pEmr58VL1tpimOuWxJxDkh+aiLNR2pmYqCGONFvMznD1daG1THnwtwfOuaxdBylnzZwW8FPhbDuS2f7zYBazkkry7ku5lXitMW5fA5v8DzADYzNycO3YnAmYoQruJD25Ave4fSH4b2qC8GbaN2mO9Km/Id2F2I0KaXGm5a1/ovFbJKVcpsCU6Vf76MQN7yVad44yDX0OqULXnBUlnMbiBK4UwS3K5Qp7T6pcVb+96x1yDW2th01x53YzuD08AMvW4uECmVuZHN0cmVhbQplbmRvYmoKNDQgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA4MTA+PgpzdHJlYW0KeNrNV7luHDEM7fMV+oFRSIm6gMUUAZIA6YxsF6TYM01cuMrvh5SoWa1jw/bGl9fCYCg+Hk8UNTI3Bg3wD01y/A9md81vX3n8+ud5Y2wp0Zs//DYVSzGYa0Mx95ff5ru5Mp/W5uMXNMWW6KJZHw05b8knM7lkcwlmvf+xAnAIEID/CGATAbYHAM+yTZl/rr9VE0jWU3RiY0KGe1sQFS7qAt+UBvNYYZ/X51FGZ11MPUx9O4tzcOIh24TEziDa2OPUGLcSb5C458ll0AwyTyeOnnKbJQ5nF1pYQDOVHmroupqdHwiaFsch2ZRJPTMGfZwn790KMEZAXh/c7Ltkz/b5gYdRWFitlNlhn8H2FPhmD85tWJOizMKoyVJ2efTVFnWRxyrsxn06QSSWbRCHy6xGyBoqYYfoD92WSMIWkHyz5JfAu2tkaaSmwQFrsKml4tyx4vg5T4HutjZgqkVJG9NtH00iFsiP5Gnqyd2bgCzwHRTUsg0LVCZDXqgNbbHUpqBOyzp4kMLgkkW0JeguWTiVTMN2LorfHRaSOHkuyFRtYa+GNgaN0qYrdz4KF5RnpNVpxdTEkLBLrIdw1LLAZhBBZxqboENLrfoofSv2xlG32ljxGG1A3pBYyLqke9q5/CDQkS2QbgElF0lQ1qUz3Oq9Ut/LH6V2Sh2QqKlJJaAoyToqwbXWTkN2/63KfHR+DrnjAD09vzPgq+dXu92ys+S9NQYtdw1DS/ZRPHiwbOsCHkbgG/DAPRxBYeqGzfXd3qu+xCEYfBozlC1cQsyAewNeNrlBxLY+/4+radnZyRbvNDFx3Vt4a0dDi24dazzwWCqudtr7aqs/3N/aWmHPiAOGe2VYnepdRC3abmY4TNmvOjo8ufO5zF8zPlyw8CPwkpXXpN1jkn61RsnaNvMn2pPpOAO+OB0P7YtxHg9bHTtwRGNw4q19nlCLSs7zdhDXD4dHs4bF8ka8gLUR+N6L6NlPI+/5M9v7C2gbge+fthc/vHwINsZ4AZEj8P0T+eyn3cARX1d9yUGvqzFwgdFyX9XX+y7Wcp/ls3KKiW/WWZsgHuG2j6sPfwE+23/uCmVuZHN0cmVhbQplbmRvYmoKNDcgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAzMDU+PgpzdHJlYW0KeNptkbFOxDAMhneewi/QYDuJk0hVBiRAYjvRDTG01/YWbriJ18dJ2h4SqIlsx/nt+gvcgAD1IwisC+F81ehV9+WwTwM8vhAkk4QFhlUPORqXLAzzR48oI5KzSDboXpDGGREdEmksruVEkJ0r5zn1SJMv17JXV5vimKpLKk6C5KcmKvFIrZgWKAVxonszPcPV1oa1YkqZuT90zGPuOGi/0sBtCT9lwurnzvZbAWoxx5JZznUzr2qnzc75c3iD5wFuYGyKHr4LBmcCBriCk7gHX/AOpz8Mf6s6EW+CdZvuCJvyH9qdhGBijI03rVT/xVI0kUTz7RmYKv46UKGofPeZFUwDQctS5smd+DK7oj/mr8BxY1CL6ctU7IsU3Dn0B2Xi/k6+CNvVHdE+9OnhB6eohugKZW5kc3RyZWFtCmVuZG9iago1MiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDU4MD4+CnN0cmVhbQp42rVVy27bMBC89yv4A2Z3uSRFAoYOBdoAvaX1rejBsqRckkNyye9nlqJUW5aBPlLba4qkNDP7Es2zYUP4smkcfmROT5jdwR6uxmdjc45iXjHbZetjME/GxzRPHs13c28+HczHL2yyzdFFcxiNd2K9NGbnGptyMIf+x57IMVEgfDzRMRJ1A5Fg7Zjbn4evBYK9FR+dYgTbNAwEsZm5IvjUZgzJEZ3C8uDnw6XO6KyLzSy0zi6UntF4hifBmR1TtLHyqEJwLETdMBMtAbIMVwnQgn+JbL7dbSy+PGxQQiI3036h42Ek50aMpyuad6BzEff5Facmg5F8jpH42BONQoxc4PqmhjoWBjnLNvxBnKzkXLGRl7Cf4AHNMgAalnOLgpCawI7V5hWfIcUT06g1ckvCJjVcZd9UatST4hR3PCx0CO1SJogVa8S8ZI1YSlMY14svG0xCNoawoltcAw1Mi1O9duk4e78EAo6VLc2zCmvcX8X5oqH6oWW/nxTQ+E6OolwC8YqqOKq5VMtaMqx05CQUW3L9h67+Wxe5mG0jad1F/X/pomRDditO6vvWyX4u7xKW6rJ21lrHVkZFOyf65cVTaqgLvzpHoQCtyd1JlKm9/M32cr/TXtMqEjfvqx/uph9n5HhHFZsi3S0Rv0J0aWpCtMBUolVcgZRYb1PRjvdzE7VM9V6FKI9z2asCFGnoC3EZR1Sh91VUV6+7rRcpDgjJKdQDIuJwEb+cEHV66zDDCSKCjogNOiLN5TZeVfX9hzdjtpwACmVuZHN0cmVhbQplbmRvYmoKOTggMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA0OTE+PgpzdHJlYW0KeNpdlN2OmzAQhe95Cl9uVa3ABtuJFCHxK0Xqtt0m+wAEnBR1Y5AhF3n7whxntVqkIH3MMHPOxENY7Mu97WcW/nZDezAzO/e2c2Yabq417GQuvQ24YF3fzp7o3l6bMQiLl2b82VwNC+sfL6/H4/fXW9/+mxrbPefDe/f8dqy5Yp05I/V4Hw0Tnvfl4T7N5rq354HtdgFj4Z+l8jS7O3vKuuFkvq3PfrnOuN5e2NNbcaAnh9s4vpursTOLgjSlchza2qEz09i0xjX2YoJdtFwp29XLlQbGdl/iicRrp3P7t3GUnizpy52nK4kIJEAcFIM2oIQo9jFJlPiYAm1Bmkj6mhuQBG2JVAYqiLTXUoIUqCLaCFBNlCG2lCZCdwkPGbpLeMihU8JDXoHgoYAWCQ9lCYKH0mfCQwVlEqrrmEhRPx7VIOrHOdyqGKRBCQg1FfXjMTwoBfKZGuQzaWY88f2oO5dwq3JQDqIJcgWdqgT5DjRBrjFBRRPkW8R0BEJNDUdbTFDDUYYJajjKMCUNRzkmqOGogGoNDyW0aKiuHm7hYzma/gzyx4l8nGBekSVeQ28c+WzE4y8HWAgcIUEDEAJ/hiDLIoEEUX5uuG7Fussfq9zenFt2ixaetnZdsN6aj2/COIzrW/T7D91XClMKZW5kc3RyZWFtCmVuZG9iago5OSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDUxNj4+CnN0cmVhbQp42l2UW2+jMBCF3/kVfuxqVYFtsBMpQuISJB66t7TaZwJOitoYZOAh/35hjlutGilEHzMezzkZOyzqsrb9zMJfbmhPZmaX3nbOTMPiWsPO5trbgAvW9e3siZ7trRmDsHhqxh/NzbDwb1XUT9n330vfvk2N7R7/mOvy3rjHl+eKK9aZC7Kf76NhwnNdnu7TbG61vQzscAgYC9dl/TS7O3vIuuFsvm3vfrrOuN5e2cNLcaI3p2Uc383N2JlFQZpSOY722qEz09i0xjX2aoJDtH5SdqjWTxoY232JxwmWnS/ta+MoPV7T1ydPNxIRSIA4SIJ2oJhI+lhCFPuYAu1BmijxNXegBLQnUhmoINK+lxKkQEeinQBVRBlia2ki7J5AQ4bdE2jI0WcCDfkRBA1lCULXpY+h60oSKarJowpENTmHIiVBGhSDUEWRL1yiT6VAPlODfCb5wmO/H/nCEyhSOSgHkUtcwSVVgvwO5BLXcEmRS3yPmI5A8EVDQwZfNDRkcEJDQ47/SEND4WPQUKBrDQ0lutbQUKIzDQ0VdpBYV6Gz1YJtLP388Y9p/JhefiSp/Ai/ZeSzEd99GV5BIynW35QIAmUGwmiJAoS2hQShvCDThIRcQaaJGCIE2St2fkCj/9veztV2IXzeB+3i3Ho66dagc78d0d6az4tlHMZtFX3/AbvEGIkKZW5kc3RyZWFtCmVuZG9iagoxMDIgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMz4+CnN0cmVhbQp42qv/Tx3wAwBey0gxCmVuZHN0cmVhbQplbmRvYmoKMTAzIDAgb2JqCjw8L0xlbmd0aDEgMTgxNjcvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA4NjY2Pj4Kc3RyZWFtCnja3XwJcFvHlWB3f+ADBEmAuG/gAx8HD/AECVISJYEEL5GSTN2EbIm3aFundVlWbMqxJ7HDOMlOxeNM1kmcSaKZTHbG+ZSd2BnLVw6Xd2drPJ7KZHPU7Gx5VRnb5amp7Ow6k0kE7nv9P0CQomTL5XirFi3gv+5+v/td/d7r/p8ilBBSSe4nAmm5ZVdzW374Tzqg5TJ8J6bPnpa6NwgThNAA1P/40Im5o2dnLpyH+tOEVLvmjtxzqO6rplZCzP+VkOTQ7bOTM/T45DcJyTgAP3M7NBg2ir0AboV67Pajp889+DnTf4L6CUKM7xw5Pj3571v07xCy+TZCdI8cnTx3QnjMvIOQ3JuALx2bPDp7Vrd1kpA+IyFs+MTJ2RPrMtuPEzKwG/q/TnSsk10meuhbYGPQMqJe6UHSRpELYiTqRyLEAheqVcnoof4Z8lVCfsuEN5dEmPsJ2iwR+nnsYwK7zG8RyHt9zkE5Ro4hPrvCqglZ6tI9UXidvbL0LtQjS++q9SIe+bOldSvaX1xVL473Y/K9FeOp9RKeQlKSQvaM9eclaeRZYt4xooi79o8p7X6lNj9xSFrYM6aw+OT3jMD/9LQ85Y9EFJJXSE7uuwQyyE30Nio0pUgThxoVlpJmJOWlUUWX2H+plppy/dP9itg/FlGEeH7nrWMROeJfGJOU0VFoyub9ktKFUFc+Ly2q2JMzSi00aTVJacH+FsR8aXRMAmoWJiXFNDo2AS0S9pkQyiCUmfBP5PN5v0Ib8nlZIaNjs/l8oyKkJBhHF58EyvS50TFFL/cqotwLfOQVOtGo6FIy0CXNLOqneiXsQYr9KgX4qwgT/dOKUB+Bzpy0IC3ABIst+jgwuWNsYtQ/uTM/JucjeUnJ7hqDPj+yps3fqOhTiiHXcIkwVVIiVOVeGSQu904qbOqQQqeBCkVf36gYUhKSWpmbflZHpiQcQclO5BFloo+TakxdMlSSXH9vfaQk+4rUSl2Y1FFoA5CQA74npP4FeRL1wuVF/ChTRfIDkUUqQTvyZJ86ReV1bldicBfxL7NWflNVijN0qdIkgLL9ciRfH2lUqlOLjPUrM5N9jYo5BYiSpFTlhvF2AOTevFKNtZ1Qq4Zao2KBYWq4SCSQwDTMq5hzE9LChKSYQWiNSk1qZPfYom6mLx9Tqmflc42KNTWyY2xkl9roj0C7nbfbUovEktsztmix5BQ62atYGtBmwZJ7F6vwpxp+FOoCTQjx0bFFFB5w27sA+sVp6yMy3FaE/Wo/3gJLAVvywMkg0D8IrStVdR0FLhJil0FaOYVsukQp5bqyp8giYf27xxSL3Cv1K5VgfCYZDK5XmoDpv2O1UmImvb0LE4s2sUH5VIM/CmJyAG/2hkbFmVqkeHWBnPHqTi0KePWkFnV49aYW9Xj1pRZFvPpTiwa8BlKLRrwGU4sVeK1LyUW5K+IESFiWmhR6ABdIo1Jf1ukqdd6ldjaUdSZKnSfVzlCKKNUNH4C/MPAXArok4A+vEeAPr1HgD68y8IfXGPCH1zjwh9cE8IfXJPCH11rgD6+plNTNzbQxBdNaJ6Qc6HYix1UJSy+FttqUUhoblEZYhc2wAAal62hRnuyS0SPeEMOP3LeUVEtdSnP9op46+8fAkSGDreWSuba7LSV1cHrTgEf7r50EVueak2M7cT3No0nfJrlrsY06kbl2EABQvDbBsComuxqVjlSTu7tRybwXKljwNKB3gk6IKy41SYO48kGWWxYWBuVBcBVjECLAs4I7yFDqdIBIu8BFuZQaQNOB14xzNKUi1zC70CRLUvcCjLduJYrUpI6l6KAFMCVlAp1GdsfYU0wSJP9TLCH48r3oSI3gk2WOLQ/AEs6tXo8T6MzUuMFyEzNgfbnJGehmuUk/wBPoyFbfMwlkgXuXB0CZMswwAPzBhc8C460xiay6TB14CVCCHixLf82oMCJyFOdEwO+o6iqX5wLdry/KQYJWfUKTg9wNItpQ6lKMvH9AHsRJUXvdJfEhM5qEye6xJqkbQi5SrzVKSFdRBWIcalvKo7uqvLXMWtOUjLa9sYySXFFVE5gCrGa5qN5N4CiaUIoDSk1ubNQPIVPqzjctNlEHLNDNK3p3+kdX9GbXvPdGd/SklK6GG03Ym1LWNSwAbWhfwNR1UUGhTUoT3JHjLKNtFnWCZinDYmmCdaaO2gd+B0JIEfEmjHjww7Jb5AJdVLcMXqjMQiJ5jcZ+8K1dDUU5DEBtXUNE1iShcVJiehCYdqoLHNILWMv2JqUd1vPQddq3wHDUYVc6AB5OKZ1wGUG59YOApQGIpUVJbU2hCSsjAG5LXQJnBcB2ACgCt6QuUd4yCgBv2YE4/QDsRBwEdiEOArsRB4E9qafA6/UAtBcgyqF9qaeo2jYGkNqWRzyK0H7E49CtiMeh2xCPQwdwzhwAB3FOBMZxTgQmcE4EJhFnAIApxEFgGnEQmEEcBGY5Xb0AHeJ0ITTH6ULodk4XQndwuhC6k9OF0GFOF0JHOF0IHQUZry8p8BivKZsAPK6CmwE8gULntSzU7oIwquGcVEHEOcVxqIZzGm7eUBr1DK/xO86qIN5xtwoi+jkYR0O4RwUR4bwKIsLHALe7NN69vMbR71NBRJ9XQUS/AHdqCPerICJ8XAUR4QHA3Vga70Fe4+h/oIKI/gkVRPRPwp0awkMqiAgPqyAifCr1VIWOFZPV3gbFOKsIsdFzxTjcCDoTSC3sxCTYj1USF4kQ0zMhd02VSISWBls60ua0OuRItMOaEd3UlemwtssRBs2ZJE2ITmutTC/JcmG73M4Y/SrT6QtTXj39ssBYYZLp2GX56oIss7N6Hbv65wLVsb36q/frGNsH8NVv4d5yPVBwiblJNakdURKjY9lKMAr3CLQ6yVY/r5FxtZZ/Oh5hBldDRpSjCSAkk25zOa2Xoj5fFL+yLPvol33wW5jGzIAujbKxpb9hr8HYiUVxpi/rJzjaPuwbZwDRWwCsJlVxweBsWBRJH0t0dKjDOh2i/GggFJEDQZmNuQL2gAt+gk7c6hLT0m/ZGfZ94iNBEs9Gg1Qn0GGiA2509BARBMcIo5xih0e2y3qDtyGG40UTyWTEIHLq2zvtmYy7zeW2x9NJdibqsgWN7YWftBuCVp9f+I1RctjChncLd7w621Ppi7js95y3OwOeChPb63Axp/3qd7//NuG6A0mxOdCdnQRInHRk2+wqNQLR6QXdLAG1HACuHSMi1evJAVWSwWAwHowlI0CHAagjLiSvKNR0G9QMiYQsO9NtmQ6W6WjnMIvlHj74G5Tv715oqG2ui1/8ZqixpmNT418+TY/v7bv7oOxjvT75UmO/44t1X6qNFi60tWyIvQxSqYWd/R72MkmSlixYHBUoEeaJwKjA7gXa9ONEr3eMAKm6caLTBXVbE8loPBoTDb4G4nQYQGDJhBwVRafDlW7rBP24kWBsTwAHGWxguy01Xqu1dd3A7V0X5jY22sw+m6XGsn1s6htTB74xl9/KFmSnw1nh3nC4/+x5t9Fld9X4DMldXzt16Gu3JkGnKMevgxxriJeksnVcbjqKgtNTQSgKzmolxOq1etxOQDRnRLAb4kJiysRnUwVmTdO/f2hw8KGD/4Ii+5fR/bfmL15klw88MTX1xAFVVFef+cShQ58o1OM6wPkdML9EmrOpG2uPn7OEY5GYqr0Y115Emz7SpladaRWQnRH6K1wTi0gGvcUnR/2FX72Blzeo5ZTs9koqMRGfN/wt/PkeKdJjAnr8pC6bwBZG6Kye6nTCAW7hQJqTISl+4uuQYxHR4GmwL0/qKK1RjaBXf4rz/zTuDSAZ/VhhW5SIzxV9C2lRKXBF+dxoL59mr5Bmsim7IUF1erBnJogCE+cNVCR6naifBSLoOIgmMAImwz1EkEummTTKCbCLhBGtBxfyCjvhyiqzJzCoTGcHX5GgOnZHNDx1ZvqbU1PfnJ7eYrFEPBZbZn32yObNR7KBrOcgUv0Nel72/Vi2b5y8ODV1cbLW6LN440Z3z7Ee+GcyPoCuSJPfH4D8wiSZjWm+YVbUszLvANSGScgel+1xbRVaVbF1RMrkh84ogtSxqWgs4I0VXk54/TJCdHPCyy5H/VdfQLreeovLtBd/f/lLn6zSQF4FGqqJPVvDzUg1oLXc6KvFUeXSKFdfKLMDGwlnA3wMgTJGDpZM0Uas8XYdjLfSDnHMCP0ntLznfCq5+jNgXpHS6O+W7OxN9jz4rkRWjtjMJh1hdFgHAYQ5RmhJUHESizfF9QZ3mZis4EuTYiIpWMul5baDZ02zH8SjgYB80eQzV/tMFyWfV4r7LCHjz/+H0W9mz8P0z6PZ0c//rspCqaWK6gsz/ijQlvPGLFWFRXpLlaVE36PAf5DEshGvia1JXZAE4omV1CXpSqooXtnZkOwz+8XCH4a9HgAtQQM9Evawy5Ln6vd8coWR/l1hj0eSPGzQJ1eZCi30SY/Ej1f5mngN1oQFbAY1AZ5BM3/wTpr5g9VHdbAOY2KZyYPFN7EyaweP/trY45OTj+/bh79jD2QmujeOd3SMb+yeyPz24sTExelp/ps7mt18LJc7tjl7NKfSgLJIgywcQAN4cpHqQEI6gmuRHdBTlAmmyXSrE+KkM+wMBf2Aa5MTBjCPkp8ss23wlegseXihT9zW1XVb+klUley7Yo+73XH7k0+yyxvnNnbfvvF5rh2wnIIipQOBdPgfinLpEqpALhkyQIazg3UephfpsJHqRfASunlQF7queSLCRaRzxGAQxoHeZbfhRQ3mejasgyE6GlOxWLwCFqNOJRb0mEBXUYranU2sJFZAAMZcbtWJbGJpogm4PaG6F/ZmLDeZyI4kvJKrqqa62mX1yPL09nO9quRz92zf6E56w01Bb8wqehymq/9N1YKqkUDMFeyQvC5LNc4Tdyer49bZR/eqytn76KzVLdSYrTUWs95uop1cTarKVF0tLbFHQFe1JE0y2XQEwmwcRTEMkQTMWk9nScmXa/6orq4uXdfW2twhx8EhefiCVoOvmgGs8Ok8AgPvThAAW9Yiu89SZQl7HEPNqeeCnmAD+Hqp/bbOTMNmUdAZzc9FXa6o7Re/2O8z2yy2yrr5WP33i4rtmtrYNh5IDddYwn4D1UXXRQLNgf9ZjAeNoGPOCRF0RCeARtH06L3ABRuH1RAY4ZkExsmgHtdkmrTJiXq0PW+DK5HkDr5N1RUQmyyuDncxIKDKYIm4Q4xr/sqJVn/UY7fUbm3v2jG67xe9Jwc2H48Ho25Lle9AfHP/4Na9c+2DZ/tMsQZP0C1XRUJt8cZ0tfQXmw+0JsLukFuucMrNiYaU2dK8I7d5PA18hEAxu0EnkGVnQyh0AVIMHkz5qgGiXcQhyzHNkWAgLToRLUJFWFs06v9yIhCIfRnlRi+D7/D5wlf/N3f+Vbh4iOq3IEc9C341jHOBw+LeHxz3OCmLPeAwlp2W6jOKvrvoLLjb2isNzO/YcWEgFvDE6gfrGkYaQz72PCQSj+26f2jo/l30Tp52P9YyUls70kLv9KtxHPl9mL0ISwxocIL10WHwnMtxiK8+TzKp4+4BjE0AIhLg0FVlFV35dFz8dYVkswaNv9bXOq0h439+1hiysheinmrz1RfsDmq3sT6TxR9x2AtJ+jObA+euAek+AXPXkW3PxINVAoGkeEQJwgbDDpsR7qoEIVz04f6sC/JRSDLIvNardeSz1UBlHakFi0lijlOk0wCuQViLXndGo1s4Wyf8SAzZbFLFZz8H9NtC4o+EOq9DEv/oAWPIbg8aP/aoGHGwF+OBisqrl60O6rDTXOF5YMhhZX2VFYG401bopl02J5iHrfDX9GWbk8sVklDWz+UazPrsJqAaJMvosmBjtbClAb0ahOKi1Uh0uzu5ell/5etRj1f+W1udO+BULjqDnhg7ai38PbcjyqjD4/bJgX/9VSjmU/2sDGuwiUUg3UuST2dNbtjLVYAbYSBUNwjVy9ehiIExPGLAZHW8KFp1WxcsR0AqORaPYUEK8g9Bxst0+ziCaqQrEPL5rCMQICSQDCSiEiadiVjcuCLgrgh6bp4x8UycL+s0q8JNYoR69zT3n+jJHs+17A5GfZ/aubMnu3NHD4uAMechI/AF6wbnR0cvDMp+CrEmNz40NDExNDTOZdADMtjKrsBOq5Ycypq8sNMyaTJQWWTMhXFFADeExrUshyCamB9aeV4/xxFX9AJ7wSBAtcGkHIEJ/PF4QmWvFIhW5YTApq2MP/q4ytWeQHE/7Nnb3Aqs9QCLLKIylQyIPNk+jVp+PdRYyCFvyCO3K9Ax/WfQcZLMqBzF19qsoYsNl+/W/Fl5FV4xxsyVYeWzZpgkSRJxCLGx5W0n6KzkfGF3B2G0rciyqkx64Xafs8ZhrzAlq0b27M21ekSnrdob7LqtfduZbO7cVhbpSLkiFRa93nhgZGi8SrAYJa+n3jt0YfuO+cGS7V7htvvotbYbRG1xxfFIsrb9RlYjrWHDYZgLrXhOw/2ojfgK7AUeW2nEP4Rd5v3LRqzKIgI6lkAWcyprCWimkCjN85cC9GQWNlkiV1sYIxPPl4IC8BcrIeoABbZhc8U7ytDyWUskEklGEs5EIhaN8G0YbAvUcKJ6H4dhVYIaM0Q6wAaYFPMUvlu1N1PX5NfbapyhQOBgy+77+obO5nrPDBQ+56SibrgZ4sqGnMUqVIQcfpdbGvjYtr0P9A+dH3z8qKG+uxh3qAL6riefGVH8wGHIaGCiyM8ZXLB/wSMlHWjXre1i/UVrFw3EIJJ5IzUYro8M1q7hQTP0g0zmyu5QsUDVEIGAgjqHDFuqmFxh8IMcnKUd8qrAntbOnVQrSMhUCtyKG4FbcSVnEMrMTcY7Aw59peipYeeT7uawxxMufIX76ymEm0YOhsIeyCtEVc9drAv03EA6ySez5iSIzksFQyXoT9D8VT0sWga7OUiOQd1GMFxQeAXVMuRgKV3wovOqLSIjHggAlL82aj7rSqUISXWmMm0tMH19Ii7Xxk3lG1xMvjozy+lYx3tYvSv6hdOhO1ytghi0mip0t8aHt7jy6YFTvT139afH/FHfI3v25HK7d+e4G8+dP+MwOeOGCpdboPKGTEu4TV0N9aHKVS4dz89BWBVgK1Gy/TthSnVUE46b8CUMLeN46hEuJsn+rFNP1e38HEdh5YlClETi8NEShdIOkHNivcZ/0+e3onobMl2bi07bvyvNIvccXiJcr6Rzcy6twoynWP8QSy8tgUYJ+Q57jUT5uzkCaPufSntVK/ASIT3ZCsltNOjUrAf5sarBSRDcyzlPqa3k7PLfhbgj8z2kmhYnDSvDjrW4gg1uZk26fLanW4uk/8TudcmeL3x7j9cbdbzQeMcy1YXPvmaP2z3OT79AinSSHwCdxXMJ1w3OJX4g+7xR/i0Nd/UxVW9CHuy7g9ybrWyEuESH22CtblFdugvXrX7caBAFvd49AilduS/3EWxEFHGce4bwMkbWgy3QR3C3iHGg2KUt6Q7SHlc/fElfV8vX0XmbG1PD6hWKX2UA87L7wIa1rWAFzM+6a2LpY/V9y7ZsB5lEyZ1oy1z3KA07d8+Q2KL22Yqw5uYW8Z5mTsaLZv6B7PxH25G1pq71vSU297Vfh0POlTXWrsUqWNP8zKNbpddZPPgIlx98+JFFgu5prqw1/933eyCSG7pvZOu9Q0P3bh25b+hcXX99fX+d+vvchYGBC+g8Bi+Mtm6rr9/W2rq1vn5rq5YPdkE+GOH5IOQVHsgrTOV5xXLK69ZyCiQMpe2lpbyCYO81SWM5YjZcShzLOzVBeNW84iPJHn/Is8dZ1JBuRfaoxpvi/uDPVP41gVAQiJ9XBLWSv0Y84bI0aUSLOGVpl3tVbrYScTntKuvD20oR6dq0K74y7VodgTJrpV3RUtbVujsgRDyltMsNadfjKJNXAlreFfO7Q4VtZYGGr036FZ53/emIYhsd+04Qk4dhP1xxoeZ5Y9aOfri0VEvZibrDAiMg9AR6/InVCOr2Q0PgPYToJtQVXUxb/Fo/rmsCMRyXChcqT1fUdS2RMPj/WHGjWzoYEZ3X2g89Uye5LHbBWeVrCRfNxr23FYKwOxyGBFHqafzn5SVdXdeAcvDCHuNFkEOGHFDJjl3nQCc8Unw0FNQD9dHVaKBzAXRehpTPVqTkZIPMHxxlMMVQMwx+3lM6t3OXTrWAMXQBxRMfWCRen9nitId6mrZ3dK3f0tGZb0sfClbbzTaX2bYutjXQkMwMta2/taX3ZGzc5rNV2MMhoSsYstRIPZ0tg8lEvMbhtlSaXb5Ol99SaZF6M61bEqlW5NsCP0fYAqkr5aSwVxIe1EMQYpBfohPgoah4QFPKSREL0ksqUoM4X45OypAhJ12BBxiAamDgvJextABWR2rtPCWNYQCLuZxrZ6Jlmar61I3ucG+Ib9rThMloE0bkQYQGXXajuaryLr/LH+/YSx2Sxx3Oor6zCBV+5bTr9Nz+wZebmBtW3yaVMxs/lHKXUkfuxnkjow+WNeazVepTJog32mGVRnHpUa2aREKNvhm9+9ixszxnhr1G1MfckH0cOX/+SIHnIRs3bNgIEN8jLC2xN4CeWrLrmRieD+mLmZKH6MHS9GTeIEJGDHkCw3WjxkRs0usehG2P/sFSO+x4gMJakownrQ6rW3vwpJ5mJROQQokGflpUOiXiOZTbzQ+3Xo7oviiGbcaodc8Oa9RoC4tf1EX8jqB45JaapNNt3HZYDLmADX+FuTBjc1IWe/fdGKNOG/1SZZU3brcXfvGTuM3+OpXsdlXOXVzObeSurMlHBT1m/MUTilgxiddYg3WzVq4fK7JZ3B+shaZy3UZa44lYrDaucb06wQ8xNcFfdbaIjVZVYY+ciQ4WU3uDnHQO5tqPtY+mUIedHe3rNB3ue+DuygotqRfMFRuHTT2t+7poDNW6RDZ3blxHIX2A3BjPHPdiPk8zQJ4M7uFP1ByZPVx6jrKJP0fxa895OUMB/piXjuMjX9ip18BCqfHX+FwOQDQn8Dmvqyx/QHeRKQsQ/3jPpk337N7Nf7NbtmTxa9r/9cOHv75f/T13/uzZ8/jlsQAXRISfA9dm4xATGR3GhxSQYs0L6lOU4vGoizjjce14dPmpl7pSO8GMyFIUz4I3Waxe2Wr+gtXHLuNzO+51f56oSLhrAsb9FThnM/z8O/BdR5qyDTAVeAjdfHHbjtzrdGXPl8FHJOX6dlF7CqA+1muHGTWmSzSUBGIwpOnPwR8U/sIXsv083pCtD27w2AKuuMORmGnqncn0dF74m2PoEySv1/5W7Y5oY29S8kSdlrAj0dQ1tWnjxzc8xNflu/QNkE07mR9RzGCzjeDU9ILeIIBTE6heANePzo3dC1YpHgD35ljpQtIlfIgYkDNBQKF63Y3vUh1jO2kH5uJgqWpmv/wISHt2oD3cKee/s3gwr26K6Piept5zo7Ehfzzqcbgb2sNdck+TIyT4rC6fqerxV9Bl0raQ5Pkk/avuyc4tR9fbLI6op9YSCW9IZLqN1Bh2m13Vf46Civg9nkfRZvfDz2mQSQDyYNBemL/hoYc1ig+31EC+/AwhFMQEMAEO3lCK4sVnNx2qGqm6DNORdAfbDQTVozcv/M6VsNBue9gbrS9c/hpNIQkfR0v6uOxx2eiDHliGf/kqf2cHdHQV6MmQgWwuTQUDvv0iUEFHwaLQY9wLOgDpGwQMP/oDxdc7yh7TZ0hHrDMWhyi8WtZrCbv48C1Tep1ANmAGsufwxq3zW5K7fFU1Ya/NXy/VDTUMp90xr81ZmYzQsC7iphEU+b/Z7et99Ccb7+zJncx5nKZYjS1o9yWy8UxfVVWFsT5o0v2b048c/2Gluegn6O/Yizy3z2TT4ElhlYIBAVtMmNPeyVh+82Bl+l274omnllhqO2dkx7Aq+943m918Z7b/yPr0Q6erKn3RoGfzYW9bNtzb29zS09NCX9l8eBP823bf4JZvfyki+IOuiMF2W7ah8JWB9vYB/HK/0r30W9j/o19Rn9WzA9e4E0d8+WkLLb2KFNGMmL6dFAu/MYRs3rj4VuFdbqy3scsRX7X56nM2sFNzNS2glNT9ZmDpbvIzchI8aSDrtfLnOyA5+DetGmOyPoqPIVzaPCgCzrSh5EqdP4tmgi5fjV0XcFqtlVXVoZQz1WYZaLc7a6pFZvFWWg36mhqH7OxMq3Ouh++LZAHcsjfrKr7JpT09s5DqDnyVK6PmBsX3uOR8OBysDuIPDQetCMAPjNNGfk3302OkmoS0d8P24IgH+Lth2/i7YZXt2oDaeDjcHlgTT+LCePLXUfVwIkK0v5PS/vpp3NL9f2BR4t9jkf/y3Of/A15/PPipHxaihdf1LbonANeAkiLaferfU+l3FaJLz+hblv/iSv2wVjYEVvgOviu3NMpbLhAT+Qg/7HNkhJ3C9wSv0//X/EznxmN0vzfOB6avDeh79gb0vXbt3NT+4dODdLwfPCGt4rF/vDka2K+vz+P/iw+7VePjX0kt+/aNeWF7bp52dhLzuev0vfz7syc+/p+SkPBtfI68Rt9ufAb7Acc9DlnpR6mj46SHCdef80b0sL7fL62Qm4fYPTeYfxjPTVZ93uHn3x+ujNYt2xI1v7ddCf9RpQvsoOem5jn00er+/dhG0QbopRvzQt+AXd/N6PaL/K+Hrz/3yM3J7oN8IByHfp9zs89cOz7ouJYeIXrmIc3MBPb9Q7Kf5ch6FgMfuY50k/+PPxTfQl/9+Q1ZTx9530O0wXcTOUL+GMp//2CFttAHVpTvry7MdFNliH1rRXmnWATz+y6b1iifhfJ3axed40MqB6G8rR9dVZ6+bnm7vIipmyx3ij9dLgbbDcujH6wYdcYTK8q75aXi9pssb5vmV5SflsqV91squ3jZf025Unmlaut1ypc+nFIdhXLJnFlVLq1dLG2ryvmbLr9cLjWH3kc5WyrP1vwv64D1b20e24Ltij3wEZe9pXLv+y7fwJ0Y6ye3w27tj4gIO7Z6soF8GjzUw9UufKOY/2cZhyDMUB0estl4yEGYEhvUVJgRI41psEDaaEqDdSRAD2qwnvjoeQ0Wof1RDTaTdqqQHDlOTpB7YKd9B5kDak4TCfxkC2mFIpHd0DIL1x3kDPRPk8PkFJkkx8gMtI3CPcfJndA/ze/qAZzTgH8c2k9BvZaPdhpGPwW7y2YoczAGYpwhU6QJ7jpOjkKrOt5JGOdu0gjYk4B3BDCPAXQ3721eY/4BuB6FtiNAex1JwXx3a6NLZCeMdQq+J8lZ+EVaB2CuY5zK7fw+4EkKXDuqFAS6rp2rF+4+Atc09LbwsgG4P0T6oW3DGviNpTvWkluxby+n8BT0I21S2eg3GrEoU1WipwALNXcC2k7B/ae4RJq4Duag/xbgHE8vRp4lr+4cW6T0s3mFqn+ofGKRGHqfHkyHBVKP4DPrjQmjzSgY1Vqf2CIGRF4z9V42v1Txku4lMJwKqFf3XiZZXnhdIH2LMfrwjjEl+/DYojDTt5jA2l8Z7wczyz48vXsMUfLweabbWGt0GIWq+mfp0icU3WcWGel7Sj8jkr6+/wvGevN3CmVuZHN0cmVhbQplbmRvYmoKMTA2IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTM+PgpzdHJlYW0KeNqr/09l8AAAFatREAplbmRzdHJlYW0KZW5kb2JqCjEwNyAwIG9iago8PC9MZW5ndGgxIDE4NTcxL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggOTA1Nz4+CnN0cmVhbQp42t17CXQbx5VgVXWjG2g0jsbFAzwANgAeAHgDPEWBAEmJBEVSog6CEkVCIiVZd2T5khPZsZzYUo5NMrOZHI4dHzNJJm8yTTkee2NN4pd1vJl93jiTzZ04x07G8Uvi3XhnJpM4Ibi/qgEQ1GXL683MW5bU/av6d9W/6h/VJMIIITO6G3GodXK6pX2m/MEYjFyC/wv7bz3t6/0sERHCVdD/yIGTB4/dunjXGeh/HiGL5+DROw489erTNQhZn0eo/u5DS9lF/NXsf0MoPg748UMwIP6ZcBLAe6EfOHTs9O3vfFF+FfqfRsj0yNET+7OP/PpzCYQSgG8oP5a9/ST3knUKoeFFwPcdzx5buv2+yfuhD++TfSdPLZ3siU+cQGjTy/D8UcQTH/4AMsCzC2QGRtL6He9F7bgF+vQR+/EhZIMbznfR1AFY4RmEfk+4l1cFhPiHcIsP4T+hz/Br5BJ7hUOv99MPrRt1U3zyDwTmWe3mH8r9PXlu9TfQN6/+Ru8X8NDx1W7yMxj/XX78ntW2df3CfK+i/7VuPr1fnE9DEZ+GdswMZ3y+9FPIujWtCdOzM1qnV2vILBzwXdgxo5Fg9j8ZkRHt36/u8/r9GspoKKUOXQQZpBaSUQ1HNN/CgahGIr5Fn/bMlMaHZi82YCk1vH9YE4Zn/BoXzGzbPeNX/d4LMz5tagqGEhmvT+umUHcm41vWsbOLWgMM5Xs+rZU+b6WYz0zN+ICaC1mfJk3NLMCIjz6TKBSnUHzBu5DJZLwaDmcyqoamZpYymajGRXwwDx/MAmWG1NSMZlCTmqAmgY+MhheiGh9RgS7f4rJhX9JHn1CKvToF9KpxC8P7Na7JDw9Tvgu+C7DAcqshCExunVmY8ma3ZWbUjD/j0xLTM/DMS1nLrx/VDBFNTIUvIqJLSoCumlRB4moyq5F9BzS8H6jQDE1RTYz4KKnm1P6neLTPR2fQEgsZirIwxEg1Ri6KZpQaTjb5i7I3RdbrQtJnwWEgIQV8L/iGL6hZqhcmL+SlMtV8XiCyQCVoR80O6UuYr/G6FoC3kHeNtdKX5Ahj6KJZ4kDZXtWfafJHNUtkmZBhbTE7FNWsEUD0+TQ5NUZfB0BNZjQL7W2DngV6Uc0G09iZSHwggf2wrmZNLfguLPg0Kwgtqtkj6e0zy/ziUCagWZbU26OaEklvnUlP64NeP4w72bgjsoxsqR0zyzZbSsPZpGYLU5sFS04uy/RigYuGPaAJLjg1s0yFB9wmL4B+6bJNfhVeK8Be/Tl9BbYCHckAJ5uA/k0wul5V11DgMkJOFaSV0tDARYwx05UzgpYRGd4+o9nUpG9YM4PxSSoYXNK3AMs/oSgYWVEyeWFh2SGEtfNhbx2IyQW8OcNRzR1ZxvTuATnTe1lkmaP38sgyT+8VkWUDvVdGlgV690aWRXqviiwb6b06smyi98aIWpC7JiyAhFVfs4bn6AaJak0lDz3Fh2/TH4ZLHoaKD0/pD2siSLOE3wR/tcBfDdDlA/7o3Q/80Xsd8EfvKvBH7wHgj96DwB+9h4A/eq8H/ui9Afij90jE18/MNBqBZZUFXwp0u5BiqoStF6G22hzRomEtCruwBTbAJt81tKhmu1XqEa+L4aXctxZViz1aS9OyAbuHZ8CRUQbbSiVz5eP2iC/G6O0APDx85SKwO6+6OB1Hns+zaDI0oHYvt2M3Za4TBAAUX51g2BXZ7qgWizSX9Ue1+OuhggXvB/Qu0AnyBH3Nvk1054MsRy9c2KRuAlcxAyECPCu4gzjGbheItBtclEezAxoPXjPI0DRTKrx0oVn1+fovwHw961F8zfpcGg8jgOnTFqjTSGydeZz4OJ/3cRLiKjNJ6kiN4JNVhq2OwBZOXb4fF6gz0+MGSS0sgvWlsovwmKSyXoAXqCO7/J0skAXuXR0BZaqwwgjwBze2Csx3lUVU3WXy4CVACQawLMMVs8KMlKMgIwKuU7qrXFsLdN9bkIMPRg2hvBzUfhBRX/GRZmTPR9RNdFGqvf6i+CgzeQmj7TPNvn4IuZT6/KCP0lVQgRCE3mhpdNeVdzWzzmtKpba9oYSSVEFVCzQFuJzlgnoHwFE0UymOaPbUzJQXQqavP9O83IxdsEE3rnu6zTu17mniqu9e743BiNYdvt6CyYjWE74AtFH7AqauiQoKbdaa4Y0UY5naZkEn1CxV2CzNsM/0WYfA70AIKSDegBFveqvslnJBXVS/Cl6oxEL8mTyNw+Bbu8MFOYxAryfsV/OSyHNSZHoTMO3WNzikF7CXnc1aJ+znzdcYH4XpsMupxQAei2hdcEtTuQ2DgH0jEEsLkhqPUBPW0gBuiVwEZwXABACYApORi5iNTAHARrZSnGEAtlEcCkxTHApspzgU2BF5HLzeIEA7AcIM2hV5HOtjMwDpYxmKhyk0S/EYtJviMWgPxWPQHF0zBcBeuiYF5umaFFiga1IgS3FGANhHcSiwn+JQYJHiUGCJ0ZUE6ACji0IHGV0UOsTootBNjC4KHWZ0UegIo4tCRxldFDoGMu4tKvA462kDAJ7QwY0AnqRCZ70E9N4GYTSPc0oHKc7NDAfncU7Dy33FWW9hPfbGrTpI37hNByn67TBPHuEOHaQIZ3SQItwJuP3F+d7Oegz9HTpI0c/qIEW/C97MI9ytgxThnTpIEe4B3A3F+c6xHkO/Vwcp+rt0kKK/G97MI9yngxThfh2kCOcjj5t4UkhWk2HNuKRxganbC3E4CjrjUANUYj6ox8zIg/xIerKmzC4LiGsNOzr87W7FpfrrYkpcKMOeeEzpVP0EhuP1OCS4lQYVX1TV3ITaSQj+JOENuX0VBvwJjpBclvDkkrpyQVXJrQaerHyGwzzZaVi5mydkF8Arf0lryy1AwXliRBbkTNjBHsrSMOBG40E/ET3huKDWhWDNeEe7x62cVywWhf2HK36ewrlOhFfvJOOrXyOfRDIKLQuLQwkvTIzRLlqWzhOA8CSAMjIHOdEdXhbQEAnFYnROt9slqCc8Za4Gt4uMOx2SwxmE/yAOVL26Sg6TL6EKVIUaE6EqzHM2mImMIR6o5vEBxHGuNMGMWFd9nVM1iBXhAJ2wLlRf7xfZPdbZhSntZTjo58hhhyzZ+HTu6TGj02oFQzcaPTCAxdwE9rzXx1vsZtOTT7qsMidw5N0us2nlHS/inYjpaC8QtQd05ELVKIRiiXYXUITH4Alv4PglBOKfA65daQEbDGhOF2JNTU2oJljvBzpEoA55KHn+vET97bQrxkOq6u6Ix2MkHusEWOkg9vE7ZnP/RMWLTdvnO1sDg70//nF8uGV6R+qll/HS7OZ9WcVC7rYoe6Zi251f2/gaHtqYax0aGknmfk112gqV/FHyFdSIWhNgYZjDiDuLOII58nag0TCPDIaqNJDMzyOer+bHQ/V1IRVoqQwjt4tKrj6k1gmC2+XxdLR3gQDLPHScijQEimMSJUdFk9VonJrfei49fm5qftJosppEa/2p+PzD83s/me0+EiZ32U1msyE2fn5X5ny60yAbzXZjpbr7sZuW/nzOV42onqlcHwK52lEliiQamRx5TAVpwBxXEKSiIKRUKhXlHkC0xgWwI+Sh4isRp4PKjwkQ/+Dc4OC5hVVMRYhWj9/afmTrN79JLs0/tLD/wTlddCt3PXzP1nOTK18AeVEaTECDD7UkItfXKDtjqQ34A7pGA1fRqOp3FwDFj39LN8kHmS5PsA1zEfvZ/cd4os8hW+w6ObCr7L+nF6pBlKdJAJq81PqhTzhMluAJP2fAPO9Kg/m7OUqOF1WoQI8glhfsa215V3H7+vG/0EUfxz62+E8Ui5WSdJRcUiyy8ns7Xfkb9BElpmBDd5LnUCsaSPTVY94Atk7ovhDOilhABl4wLAENeB5EBLbE82geiKlmEmpFzWoITKXeSC3K477Cdhh564ws3hWjpAKlHeSwYose7znw2N69jx2I7a+3KmbJmN6+477x8ft2hHfVPWhxOCxfwrAFXlWk2jpAAtTKcpPd4jA0TpzfseP8RLn7OeqmCnI8BXKsRc2JsMwRILfgQpYEAylxIkB4LapxBlVnML9ZFUGXn78A5P2gnwIkq2CHxeLIHYabVXFYLQ78YacFBGpduQf6FtyU+7bFoVjJWdrLvYQrLY6ibtEngCYLqkh4LJiRRA3t2p73gcISjuKEK/cU5sKrMJcD1Saq2CxgKKTEXB1ICXbyMON6W2V84P9JjeHjFp36oT67pWACimXlE0U7fJF8EalUfj5F4jD1ephD4FTOQlhZL0AVqe5gKJg3xoL9cUI9aJsrMUfqkXG8jDwPjFgdv5QsRJZ+Sc1fsYh2HgsYPAU1zRVGCgnlHrBgGR9Y+a5On+wQhdxt+LyNFGk8AzKoQoGEv1wiiOAxHkIgcaVxkbQq5A3Wuw1i2Rpl9biUpDLM1HrE5rCIFj43rZhluyLbjfiv7TK5ZJdX7rYpAk+SKy+Y7XYzOWe1m1eeJp2ynfkxul++BvvFBkZENQHeI781wIvlt0YoFKrjQTSBdbvB424mJRsBAsHXdn4km/3ITv2aGL5zcvLOYf36r4/NzT128NBje/Y8dmjX+XFwrPoVFX1pYz5GgecXMA/S4RHdpwTcBpUHTaPxuNsNUql2V3krANehhkQwj4I/VUtk0uEoxCT8yZm2tpmuF/QM4JXezZt7X3iBXOrY3dOzN577TcFscn+xfePARO6nKC+TbVwFyCSORtCmxFBDGTEIeMyI4SoY8FlQE48JfxYJENcFfBC2Jfzbj0SRmweSq0RQW2qwrwfej0UjaiBogm3J61SC8kLUfbAwD1G+q5kUxQnPgSHwMsyvQIt3oLxoO0O6z+FM9r5dwZ4tzcFO1eK2eSRZUc7tendaF/ng6S03VbcEGhMNdW1lJkm0iSunSrXQbTd7mrwVZS6HIEoO2SW0mLIPLOhayfzpPkXlnIrb7bAaJMGEN5aqSdcReF3I+dpRPNFRB+EYs7wGogyYsgEvgS/l5kqzm8bGxvbG9raWmBoCz1ROkxzmT+upCYXWKcyv869zX8YNEB2BHOV5q1ESq+om4j+yW6wucP3WntmOVDzSjbFN+braH9gy8HLEZjCKRt6+eXKkR88/qE7bdsYTWYeytXegXcIRrmEo0pOmGsYoADZPQL8xygnieMRz6CwzOfx24ILMwy6oSrOMg8bQagPdhzHUqYaidSHqYz2gRZYIllH1UO3UF/VYDBJUY7A3ymoI0/x/P9EpO2VZmrhl83zLeF9iV7znYGrDEZ/NJUuid7ZtdM/Mtk2zPX03paTWDskqu6SdQ13hnoDT2bylL7atpTGkyGan6GsY7O4dqHRHtiY7plt1v1wHuukF3UAWnqihwucgFaGK0HcN4HiQS1UDeSfiKtks+eDlJ40gtReot36BxfwfguewWGwrH2fSXLJbmLuAtVRY6zbyt6gc1SVqXYTFJXBZa2EAruWorL6eZ3sTVI51s8d5iTmdICay5OBy/8LbTSYbn/sN5zC7Ta++YrAZyd8qZtG4co/JLJnIOwTJYvesPEOSJjNbuwY4+zT49ABqT7TQrNBfKYFDh9wa4iPhmF9f7zwD4NfrA6G8Xxc5Zn4cxwjidII8lKKyOLt1cB92kBc5m6lM/Ku/MrlNNui4ZcnOPftpkxMy7k992eghX7Rbwb+bJCf+bG6HE+i8WxCsimRaeRY/6sLYbMrNkX5WC0TBzmRiBhceQYf+Bhy8gcdjaa18aiZRLYCCytIFa6tNizRZm89T7k34L39OhcuQmHuuxuOZhKsaUtHqSHU4qNIoEQoGjaVRIhZbn7xQbkmJL6FuG/+e1UUVi32pIxsGjgz2L1YolgemW1qmOzunW5qnY3gVUoABagSp6MDImfHxO4Z6WwYge2jpyvb3LnTF5/v7s13A6yTwGiX/kOe1osBrHeUVGPBQVrh5ylUpr9WM18ufU7PNI+kB6Apeg8GQzmvRq7pd6xIPYNlxOa/3Ht2w4UiyJ1tTKAe9+3pbGK+x7c0t0zFiHrpjPH3nSE9LkqZq5DMs5fxeW39O7c729c/HYwuMWWaLoFv8I9BtlPmQq9Qq1HPUlhYr8FoURYIQTPN5midf9OVDQjGjZJ6/vcCZrj+8e2ubzSxZjBbZ1lbVtbuzPdMTCLtFxSiLsrV1e8foqY2J02lidgfcZofRaBFEU/dCb/9Cl2zmraJok5X6quEz46N3bNZjnG6bP7umbXpexzY9b6ltKtexzf39ySMDYJt9i5UltglX8jNItGaokkaaE8Bb+sxwXwsOQo00Fs/29y10dS30gQCK/EK+aYYqqBF1J2IwArUJxHL6PduAlqiXYopi1sfieDU37vf7G/0NHlqd+VlNAHloQUlMQ+vrA08ZlDP+GKRFsG3k3Lvbdg+0jpeZJcku+bLxLbcmB49u6L8piXM/2m/FOwzt6QasKP3zXQ21Jrtklurbk7dNbLtzsPvo2Oen0sZoSgUaQYx4O/kJUH0grdWAdoJIEJEooLNGLIqsJPZA6gzKAZ+PUBm1ODcBLakFPBiG58DvUskbOlYmQb16I2oIqAGID6pJ9IYdgtutW98VUaJDd5iFIuin6kmzophPUi2Nyna7PDq6oarVLpksHgv5bFPwoF2W7bksiycPKWaL7eDGYcUp2w0C00c3qQZ9RFA/Gk2MNFQSwaAAmWRMhDoR2DAYmBZq00ZQDTO0aqoa5hIq0Hg0CtupP9oX64ApwqFgNGQqJu9MJzRCsyMAPUa/AWdIZGXwbaPqli5eNPGCoLgH4pmliqN9wycSiRNDG28C1/jIrra2XV1xeo3jVcWam5w40euosokmSeBEU/nSzoH4Bt0UN0YS1E3Gshs2LMQKlojRJFx+AftORdFEk0+vodhuwpifNzDWS8uSOqhKLi9LOnWSlSs8Hv7QDNXFQLIp3Vz0cQvthHtbJvePTA3ewa0NqXq9Qz7N/NsPwl1odRUNwnJ/Sh6CXAJWxyJo6DkYNS1j/NTqqtYRprTvgMsrQLuf1iu+MqPII1pUMe9No1XeQ4BzVnk936OGUi9e5puD+b0jluFX3CaL6cV0gVjsN8lmh/lr3wtDx/yLxJ+V0Nn9O8lpls1//bLuf4EW9EGgpXD+57lOFfrB0vM/fbqVGV0XXBLyhm50x9/EWlgqo0csD91QhnmjKHAGQ1kasgrd9aW1NnhaieggRREAhQhCCUaict04oo6z8DCjb7du1AUSonql2+06er2amt26+dIU6pUdlKWNBWX3JxpHo0Wt7+no3e5wn+wh3Inded2XJ6cbhhtyL19hCPgZeu1tjHfHI8mCjf4z7E0VTT2hm6jOeBnTctFSawuW6oUna4OscMw/ySQsN2bGlD/8iV0O2aIMDoW3tBYZWoLwfGw2931GsKpT/+Ia9ZApr8W1eqD9snq29s3Us/XJ05s2nU7q1/72TDw+09ExE49n2p84Mzx8Jp0+MzJyJt1PAw0NN/GFfp2GSfBtUbArGlv7Et35ZIjFS4GW92UlyQ0VZwUef7305kopXSO96c1WF2RWua+vmN40b48RLnXbWPq2oa7m3G/ZvnovzXKGWuK55tjevt65WOdcX9/eWF7/p0CGNejsE14aOfKJQVlxlxd1rQcb3TwgPcegd3L2cjMphKQ1hHXWwpw7jUa6tdSg6mCozrV2MFinM+m+XARdeJvPbjZUW4KjLQWey+Y2ErPdDvl4z2zzv67Zx0xPGjO/0QR5wGeAtw52xnz12q82XThthtIvrNaH6wL0jDmeDyj5mq9+3bmguFbzefI1Hww0WQRJlvr2tW5K9k3vbZ5sD++qhcLcLBnLk6GWFBlOdQ6FD205s3mvySIK0kQ03NRkc6cGGwcD/oBokU2C0VsViTQ0KRZfb+vglt2MB3pA2EEuQODOprUok7yBN5wDn8Nx/JzAggjVUkGwXkgaKELh+GsdIlrDK6YDkAsEAnVO6p+ciovyWwj7oSuzgUK28HhVmeAwmCw+j7epflRWFHmUamTRrNhl/JXccshrsElWp9QOeqOZATtWPuEwyzbmc1Z/h3+J/4C8aEC3JgcPyTRm+Uxh33r1QYLPlQxmEjI7Ta4MBoPrTsmK7p8xwHr4+8rx7MIxStb48MgWMI4/QGR5ad9NN+3DlSzKvLQ5nd5MYf2cYBXinYQqaV3twcVSt3at1K1ElQ1rpS6tLwWoLDtLSst4Gf6Bg3+WtxklO/8Vzm6DkvcvP8vbJGKymk3GXKfRjCUJP0+MvKxA8XgE/0eTWbdVWJ88D+uHCvWuWi1fWe/WltS7IRQM1ofKC3uHElRPS90CYSV06aV4B3la4T5mgELcyp+7hRKpcA9yDovJxr3rNgjcxnecEzxEsluxnOsEuiQT7sw9DySbTfh5QbRQit+Gw05n7jv4fS56FrH6B/xlwoPP9yWq6yrskCMQEBumXi9PZ6ApsD4/KJyFFQ5VyrrWMoQvO2Sr+aMfNdnMDvGxTwlO2WZ64MOSzWITH3ksKMlO63P/RbbJZuM3vmOUZIfl7/7OYjObjd/6lm5T3ZBrGVE7SiQ2VGADL4PtEHoKTL9KnBUFUpppVhdNrYLJsh21gUnVNYTyXwOUwvkddQNFPxATrrS1vLF9Txk4Ptw0Wu4mnNUoCIne6WzF3q5dsyxspxrTEK2JEWxu0+TJXofNYidGSeLUQ7NqU8ehDO5g9vjtzWONqRBuAoMkqAtiWxU7q/XmvzkxcqvYJyc8Tz8/QfFlh01s99orPS5AtIboNydPSZCjXLDQoR9PdXz/aFf82OTksa6uY5M75+Z27pib2yHtffTgoUf2zj166OCjewcePn/h4YcvnH+Y2ST9Jd9fky8iDypPuO0SwZthEDZkPvOjyZdjbQfmVRvv6oqX/dTmtFoc7xBFCziWz0hWsDw5f04+Osa7ZNHKHxAIXWMCXJIEfDagzkRbJeiMJpn5M9d8cUZ55vmSzwUNqL5ebeqklr/2wQBsqsBqkZJCbS2Kfvw7cFK581aH8efd8W2jbVucZpvZZRQqDw0sneoffgp39CqyBaKJWVrtn28emmhpddglwW6M9x/PdN08/kL+HOAb5BLEk1N67lhfMC+otnjMYZE7CBYmzCFBcK13ZlGIPZjjoQjF9IW3wwsQkK6FrzvnDtTeGfTTj1R68rh2qrx2HlnIC/K7yp8/4tN3VAeOZ/sGTw6Fp6qsDlm2NI21bmttm4zIIYNsk76U+wV13HjKbpOeFPDTnYtDQ4f7qqokq+w2RyNT7V1jqgj2K32TngjS48znwS7p+SNh3zHY16pa9oXZALsLgj0E1oOo9CyyppodCECIEYsRXs3H9piuNKzvpQ5/h4JfBXJSDvqZ7/uyQ8RJ2DBKKvcf/je20xjyBWo+XwA6jPjPZdgup3BC3yf4t+TvYZ0w2vNEBSNHD5SVBkhnOJ6AjOk3DhoB1/RRSbOTc0WM0oeZhJNlaOHqpkAdpb9h3beHfBK5diggsgRtfX62OB/rWRxIH+rYfGHeaLA4yqfeV1mzo617NjjS2jnR1DDegZ9OHO7rOzgwciq54z8/GiB2m9vo/9RetTF3y9xodKK1ZbI1MhbV65/+1RX8EjvzbUyEYIcQs/5bBgDNcfonk8LW8CBX8PLjWCrlgmHg79i43Cu83SQ7wR5zX2IWcJJ+OjKYVu4yme0yJAy72REwBon+BEfwT8C11Fz99yWoz6G/LxG/zOec71PVvjqVXtWf1LGOftVzZnpMcy/ENJq3g2+jvowJnyUA3Dz1cG5O92219upyNyBaYtS3OfTfyWCZCDUlcll/1OFQRGX9BT/scrgdbvjncOXmXQ6Pw8UuLOaeRw9ANVyJ+p5w5GsfCSxHYbyeKNQTYMpeuiExurdkKPNEMFzHQRLiyQuZ2oTugMR86HU/UB1xm22S22C1yZLdLAfclf6KnqAZckKBE712s9UkWR1ef7Uul3K43Ap6HkajaEdim89DIAMaU2wihwWI/vTrugz5gyttNYLvNM3ZLWbOZCpL5wU2MoLQyOjI6OZNMMPQ4Mb+vu54R5s/EFBd9Ou7Q6wubEGxcOijn2nFurpKoHzGtwYwxYI3KQIcoJNFh8O6OzRrhduil9hliwOXP+vFCgO2WpwO655gxup0WhcriWK2K1zZs5WARoGpLwWfDRGI5xb7Dx1w+bhsdVqN783fnOAAfkiffVi2lin369fcSz/8IdsLnXB9J9oHJlGR8BSsMf/lg5oJNcf2y8xipGgMzAqYPdC5jKtn8WtcLeTY1YlKZtRjdPgcnfE0zKcgez3HQipzVPkdTzdVuZ3Hj4s2M6R5uS2iVbpHgX3DzVnMNtlk+sMjssRo7UU/x1twHbIU9w89ycBzbCn6S00WZO7U90+BXkrumN1uYR+Rv/tz+rnZkf8eQ1DD6l7uExArJ2G3/JN+Qmj3YYkEvRaOl5JYELkxLxviSocyOmorEpGAROGsGcIrRpCsHYK+UTDuhxhkmpexyVSVRpJE5lkGJ9FSzwfvdb6h91gZSF9G+ruJLkhcJcJJZ9/wsvqbUBmCXvfM7pgGPifqA6FQQwBCnoVZb8EF01i3/pCP+mOWBLtd6z+j5iv8q/2GkCPWWcBhKORzD24dODYYjmGubinelAoNHk+2j1gl3uvFLdjraN7aOnbf7Pkf3TX8weMdW2IRQZAF4th4YOzuT0+8/58/HE50xKebuxqb9wxg8tz2989se2ixOWQyVPQlIunmxP2z8WjCWyHyuW8aTBUVO89vmrgjdfyF92z/0KzN4+GsAmc11foPfSr7kX+8M3evtXNj+kRHfCCx1Jn/+6r8X03N2/r/BaTNjsb+69N/8gF6/+am88/m7lttMAT5Y9ClJ3r6D/0+yP4OyzANz79uCK79pZb+Q0bIZsinvk1/x271TjZyH6pGf8Qf8h60l7wPtV7z+Qvsd1GuP0f36+O8afriQN+T16Hv61dZ+7W3nh7iemNzcn06HvnujdFActfm8d/ih2zX6edE1EoevD4vpB0Fbnj+Paju34y3jyKVe45+436L551F0T8qH7NoEqqW6Juhh0T+39KKs6iaHL3O+t307POyn2+zbyNvrYzKWNTXf14qga+1fz+g00WSV6HveutM/3F1/0Zso6iLd16fF/wt1HRDup2m56LXWbvnxmR3w7wpKEB+faXPwT9DdVe1q7dq3WnUBYmjgXShCWJEUdhDeklVgbqIgPrR/4c/eCfUoU9Dzfjl9fIm74d66QlWD1wpJwkZ3/R670a93PP/jgTQwK4DaAFdgPaNN9dwAz67rj1zeYNk/UbaGPncuvbbQuNq3nCbuEr7JLT/cfXGB96idhTabwx7LmvPXrO99n/ThG7hA2+0icKbbGfFH5U248517eKNNVON6WPr2kvF9ts32qQB1hauaL+SfmUeu0Z771vUfkWbPHtZu3T1Zgld1k7eYNOsUrFNWZ+6ofaaLWK7x87bx6F90f7aH68pIeWwclFvjiHH4ZL2seu2L//7ac5naDUL9eNhqHg/hOhvGjWhPvQe8JYfsnjob2wDZEQHoHLGvAk8u4NV0RTGyAE9HSbIigN5mEPduD0P86gOH87DBlSJ35uHBRj/izxsRZ34qyiFTqCT6A50Ct2EDqJD6DTyoXaoptqg+dB2GFmC+1Z0Czzfj46gm1EWHUeLMDYF75wA+pdgnL41CDinAf8EjN8M/QY222mY/WbUi1qgHYQ5KMYtaB9qhrdOoGMwqs93Cua5DbLAk9A/iI4C5nGAbmNPW66y/gjcj8HYUaC9EUVgvdvys/vQNpjrZvh/Ct0KV0rrCKx1nFE5wd4DnnxVV87qqwa6rlyLzncQRo9C/xTqAJxW1vpABgfQMGD0XeWt6GXvXU2G6zF2MppvBixKra9kpdefvSBrXdI3Ay7V6EkYuxlmuZlJqpnp5iA8nwSJ0FPH9FPoq9tmljF+f0bD+h+Pn1xGYvLzmzpqOdREwSd7jSGjw8gZ9d6Q0CpUCawnJS9ZnzE9wz8DBmWCviV5CSVYY30ODS0H8P1bZ7TE/TPL3OLQcoj2vmC8G8wvcf/+7TMUJQM/T/YbG4wuIyc3PYVX36Xx71smaOhxw6KAhob+DxesmiQKZW5kc3RyZWFtCmVuZG9iagoxMCAwIG9iago8PC9UeXBlL09ialN0bS9OIDg3L0ZpcnN0IDY4MS9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDI2NjA+PgpzdHJlYW0KeNrtWltz28YVfs+v2LeIyQjY+8Xj4VSWqlgT+RJbrt0ieKBEWEJDERoScu1/3+/sArxIJEuneuhDPdEs93a+b79zcHYXSGCcCcW8YQL/KVQsk1ozEZgynknOtEMhmAkoJHPokBivNIaxoFHDPO44k44JEQQjG9JqphTsoVFZJjTnTAWUVjEtAYVGTZAhMO2B6SQzmOeUYUYw4a1nBvNDQB0QHHVrQAMknAABASbgo4kRUfAoQcESUSzAgpdxKJ1mtAoLHEsUwdmAuUM/IKVzilnYc7BrUffSMlCUHoOwBOlh18JeEJxZ2AsK42AvoBFTZQiaAUJx4mFQYhEWynGQc5YpwTEOEgjIZdAvAOIhhfCOwbSS3DBPUglPLlAaYnrMM5pDYkgHPTFUEQ8PqThEDHCJAA/vIaWCHcG0wuKgrMIyBKoamgUJhUELDLVxpD3TVtOa4FHIpAR5Fi7EPK+Bgf4AWWFRB6wFDAwHDHlAcMJAiWVry2AW9h1KAoHSimMc2hXWAMZGQwY41AADNQ+FyYLlCDSBFVsFDR0EVRQ6pBjsQSjhyfUQltMEUpbW46Ag+D1/nn96c/nP6qrFr7NbsEPkvhsO89NmSk2nAOha3s6aq/dVW+RvT07zi+pri/Gj6+o4FS9ScVYOhz9g3ncNvvh2V+VH02nT5u/vL1uqndfTP/IXzWxczQoOArzMX+Zn+XEhUuUI097nvzQXTX5ycHUzumurWSYGoPkOayko8JXPBBwstMgkycYzq8wTI8o1RGEzekSFD5kiP/rMCfdEiHOA1M00kyur9DYLiD3DdaY4YtGaTCUazsonx5UPcXWQGZ4p5BuXIS0RDc+ffr3qEa7nGT2TkvtM4UEhHt7IJ3atWnWtNj7T8TnimUGi1o5nQeknhtRrkMpmBllTCJMZZF2tQ8aFfWJ59eNw0lJnFqlHaJ9R6tLKZdyKJwd+HE9CZpb2J+0ywSkPG5T9ih8kpPxUURL7E6npv8xs/+fxv8njewITZyIm+sD88O6M/g5uR/WkbZ7dVJNJ85embS6brG4WMSo4Baeh3TtTOG8IygA4tRk8nv5PPZYbSdy07d38WZ4/wg8+M3RewN5iceggeI8zkQEtbt1T++K8vq3beXFw0lwdvm9Hs3awkhfL/PXotlrrxS4AlH7MT0gqxqy2UINda5AD49Ya1ABHSjQ8YLDMjQd3IIhyAb/ssjyaigPEwIplTQ7gq0VNDZBQFzXM0xsQY5/p4Op6idd1WLs0YQfWLWtuYP2yVg/gn2WtHji+Aa3Lhz+B6VpuXKCuDHBpKatHAaceNGGUftCkBs6sNVHSd/ZBEya6FX6/1uN5YeIC6I5AhROpWLipkPFn/unv/6BOh3MAjtnT+8mk/KFQYtmHYzyuPH2H29Kh1baOsM3UtnaxR8cjwnpHn9vep/mOPrWjz+7oC/txwWkPiQBRt7kPJzJcXDb20fFCLWwKvR8XwlOZFpv7cAPCkXuTzVUnILhOqnk7pytmTE0xcdbtpHr+ufr8mXONe601nOPGwi3+MJXbgJLjT6ffFuNsNdxxD3g7mlXTlu5xxOI1Eh7d/TYD2g4E1yY77sBdAontl8Odh/EeSq1Amc1QsJxgaG2X3W/Xr3e48+y9DvN2Vn2hW+4S0m6BJMl8JyGtBnU5TnISPLWRrA79kneyk7y2a3fLcdYMdx7TN1HcpoRKkATnOo+T+JGC7BQhWLNC3SwdZKuOnhruuJud1rN528t0Ppr3MuXHzT2IHqoHcZIoyxVV3ZaY6eIlqhWSQ4m67tWrkoKxz6Vl9DG2VxCrx0GcyK1Gmd9CboVEBOsizunhzmtAD+eXEIFvcZ/tXCRXNNi0ngcH/nWItKJteYBYy+4xNBvYr92bOk+HpacT9d7TcqOYK97tDMiVUPErBnQa9a6aN/ezq2rOElI88b3FDt+bD7KbNG1RnRerh5rlZKH2my3kyvTF6HnHabGmkNYUN+1omV5Y9bu0SNu3sKlIe7rkqUh7upSpSHOlTkWcV64Tl24LcbVOXEa0Mh2G5/S+bCH00pjiexoLG0VUar/paqeIapOIopMgeo8psRnfbsE3D/DN5ulhz+mbQ0jL/aZr8d2rT0chlk4MTPPN+GYLvn2ArzdP93tOX5xKC5Ni1ogNcWnUfuaMXI/L1fS+lzbpSMfS6Y3psEtcIdKc9FR3cdk5qGNW5q+qcT160XyNt0NLr+BD/y7reFaN2mZ2cD66qD6xf9XtDbsBxmxWfR6sp8qr5U5Dez0l/Zg+dbdhhrQZ0L6vRZ9OU2o1/WZL54HeTnf8ijaqZMeoFYxquZMtdrb+CHPf3jSzfpvo83d/COkGx62yOwWYfut0HVlUtI831vH9VTU7+Dr+Ut+NP99+Zb8fSC4lnQt+HwySPNhbTkZtdXDyDF3ESfDAvRI/c/Uj5z8OkpJv7qrpUdyIukvDad2W0VevmnGVf5hXb+7bST2F66jxfHRZTeaY9/r+dl7wuOmcDIcy/pgNh7pvgaPSRY0+QJDd3sxim6Fw6AMoBsjxqB1NmmsKaF1YFUolC3qzYKUrNS+cMKUOhXGydLIwuL7aYEtPHaH0ppDOlIJb6imFsIVHsxC+cArtCsMM6tYWliuUaCfT3pXCOdznUAZeWGlRusJxU0opCos7XdAKvz3G2FISMnhIDxzPSyU40ohjVin8xhhvwVoVUqHUGlywCu3ADWONRbxLlMmWcsATGksLeHZQCldoL0stUeeh1Aq8wE9bWTjrUfpUB7Y1CloImo9kqxl94KKvL457Rl9fDJIIYRujoy7GhEJq1CGXAnYZJdYuSSxYtJeUJImBFiW2kNhEiSWPEhueJFadxPBMlFj6JLG1UWJaXpQY92s8FUlicgtJzHWSFpfnYHtJdZLU2CipQtJCsCdJQSZKijFRUrgzSqo6SUUnqfNRUgPGJKnyJkkKGUhSpTpJqW4F8l3AfQ5yW5IdEpLEkBTzsX8q1OlLBWfESSMkDH25EB5SSmwDktE3NRE06h4S0scNURprYFd2MvMSD3UREK/lIgnSi6jFG7DjsxOqU4fMX4zmVew9PX/128XFz7/d11d/zEfT8eGLZjKOE3E7vJrVd0h88TtWTN9nJ++/zdvq9mz6uYl5/7qet7NvB0fj5rIa5G/o9Vo9vT44GyNf1+23AdDv7ibVLaVvjof05COkVvnH+M2sM3nR/HJ28mp0l/ezVtL4OpH8aH5FlsCH0+01Vg4RJ/l7kPobfXrBc333sqqvb7pRR1+uP9ZjZGwoHK29oBx/SN99DxWPX3Hps6JXZX6GhFBfHU2vJxXj+elkdD2PH12j+W9I8s+RRqbNvHrO+3+er/0bdl/sKBVtUZYkrIhbOjbQ6NN6UsHDXD3YA9e8Ry38P7ntr9OrZgz9F0oevuxkGo+A09DOm/bx/KL5MK0xumLB78LdHDUfT4/PXh2twCMS7iej2ePA0U8YOFzGwDFPHzjebY8brVfiRjmHeTjDCyXofwlQW+LGbg0ZsyNktsq6iBr7KGrcd0TNVvv7BI7wjyKnvzH+G+De+JcKZW5kc3RyZWFtCmVuZG9iagoxMDggMCBvYmoKPDwvVHlwZS9YUmVmL0lEWzwzMjRjMmExMmMwYTAzNjI0M2YwNTg4MTI2ZDhjYTE3ZT48MzI0YzJhMTJjMGEwMzYyNDNmMDU4ODEyNmQ4Y2ExN2U+XS9Sb290CjEgMCBSL0luZm8gMiAwIFIvU2l6ZSAxMDkvV1sxIDIgMl0vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNjM+PgpzdHJlYW0KeNol0bsyQ1EUgOG1EtfjEuKQRCRIIiIHcRfXxJ1wxL1QqNDrU2i8gSdQqL2P8RIKbZx/VvPN+tee2TN7tog0myFx5Bx82FCJiKjTECGv4VKjH5aiL882bapbtUmhAiEIwx3cQAu0Qhu0Qwd0gqPup93SBVWNvVl2w47Gy5Y9sKeJX8te2NfkvWUEDjT1atkHR5r+s+yHY808WUahBgPgavbbDgZhDEowAilIwxCMQgaykIMJiEEeJqEA05CEOIzDFBTBgxmYhQQMwxyswzwswwIswhKswBqsQhnOYAt2YRsO4RRONP8YfF7h3Z56BXUt/gQ7r2S7W7hQ/yHY+V8BDU/kH0Y0IosKZW5kc3RyZWFtCmVuZG9iagpzdGFydHhyZWYKMzE3ODcKJSVFT0YK</File>
    </Filelist>
</otrs_package>