REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 196.67 KB
Close
//opt/alt/python39/lib/python3.9/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-39.pyc
Text
Base64
YQ0NCgAAAAAomlJleIoDAOMAAAAAAAAAAAAAAAAAAAAACwAAAEAAAABzzAoAAGQAWgBkAVoBZAJaAmQDWgNkBGQFbARaBGQEZAZsBW0GWgcBAGQEZAVsCFoIZARkBWwJWglkBGQFbApaCmQEZAVsC1oLZARkBWwMWgxkBGQFbA1aDWQEZAVsDloOZARkBWwPWg9kBGQFbBBaEGQEZAdsEW0RWhEBAHoQZARkCGwSbRNaEwEAVwBuHgQAZRR5pgEAAQABAGQEZAhsFW0TWhMBAFkAbgIwAHocZARkCWwWbRdaFwEAZARkCmwWbRhaGAEAVwBuKgQAZRR57gEAAQABAGQEZAlsDW0XWhcBAGQEZApsDW0YWhgBAFkAbgIwAHoQZARkC2wNbRlaGgEAVwBuPgQAZRSQAXk+AQABAAEAehBkBGQLbBttGVoaAQBXAG4YBABlFJABeTgBAAEAAQBkBVoaWQBuAjAAWQBuAjAAZwBkDKIBWhxlHWUJah6DAWQFZA2FAhkAWh9lH2QEGQBkDWsCWiBlIJABcpplCWohWiJlI1okZSVaJmUjWidlKGUpZSplK2UsZR1lLWUuZS9lMGUxZwtaMm5eZQlqM1oiZTRaNWQOZA+EAFonZwBaMmQEZAVsNlo2ZBCgN6EARABdNlo4ehRlMqA5ZTplNmU4gwKhAQEAVwBuGgQAZTuQAXnyAQABAAEAWQCQAXHAWQBuAjAAkAFxwGU8ZBFkEoQAZTVkE4MBRACDAYMBWj1kFGQVhABaPkcAZBZkF4QAZBdlP4MDWkBlBGpBZQRqQhcAWkNkGFpEZURkGRcAWkVlQ2VEFwBaRmUlZBqDAVpHZBugSGQcZBKEAGUEaklEAIMBoQFaSkcAZB1kHoQAZB5lS4MDWkxHAGQfZCCEAGQgZUyDA1pNRwBkIWQihABkImVMgwNaTkcAZCNkJIQAZCRlToMDWk9HAGQlZCaEAGQmZUuDA1pQRwBkJ2QohABkKGU/gwNaUUcAZClkKoQAZCplP4MDWlJlGKBTZVKhAQEAZCtkLIQAWlRkLWQuhABaVWQvZDCEAFpWZDFkMoQAWldkM2Q0hABaWGQ1ZDaEAFpZZDdkOIQAWlqQAWQXZDpkO4QBWltHAGQ8ZD2EAGQ9ZT+DA1pcRwBkPmQ/hABkP2VcgwNaXUcAZEBkQYQAZEFlXYMDWl5HAGRCZEOEAGRDZV2DA1pfRwBkRGRFhABkRWVdgwNaYGVgWmFlYGVcX2JHAGRGZEeEAGRHZV2DA1pjRwBkSGRJhABkSWVggwNaZEcAZEpkS4QAZEtlY4MDWmVHAGRMZE2EAGRNZV2DA1pmRwBkTmRPhABkT2VdgwNaZ0cAZFBkUYQAZFFlXYMDWmhHAGRSZFOEAGRTZV2DA1ppRwBkVGRVhABkVWVdgwNaakcAZFZkV4QAZFdlXYMDWmtHAGRYZFmEAGRZZV2DA1psRwBkWmRbhABkW2VsgwNabUcAZFxkXYQAZF1lbIMDWm5HAGReZF+EAGRfZWyDA1pvRwBkYGRhhABkYWVsgwNacEcAZGJkY4QAZGNlbIMDWnFHAGRkZGWEAGRlZWyDA1pyRwBkZmRnhABkZ2VsgwNac0cAZGhkaYQAZGllXIMDWnRHAGRqZGuEAGRrZXSDA1p1RwBkbGRthABkbWV0gwNadkcAZG5kb4QAZG9ldIMDWndHAGRwZHGEAGRxZXSDA1p4RwBkcmRzhABkc2VcgwNaeUcAZHRkdYQAZHVleYMDWnpHAGR2ZHeEAGR3ZXmDA1p7RwBkeGR5hABkeWV5gwNafEcAZHpke4QAZHtlfIMDWn1HAGR8ZH2EAGR9ZXyDA1p+RwBkfmR/hABkf2U/gwNaf2V/gwBagEcAZIBkgYQAZIFleYMDWoFHAGSCZIOEAGSDZXmDA1qCRwBkhGSFhABkhWV5gwNag0cAZIZkh4QAZIdlg4MDWoRHAGSIZImEAGSJZXmDA1qFRwBkimSLhABki2WFgwNahkcAZIxkjYQAZI1lhYMDWodHAGSOZI+EAGSPZYWDA1qIRwBkkGSRhABkkWWFgwNaiUcAZJJkk4QAZJNlP4MDWopklGSVhABai5ABZBhkmGSZhAFajJABZBlkmmSbhAFajWScZJ2EAFqOZJ5kn4QAWo9koGShhABakGSiZKOEAFqRkAFkGmSlZKaEAVqSZKdkqIQAWpOQAWQbZKlkqoQBWpRkq2SshABalWStZK6EAFqWZV6DAKCXZK+hAVqYZW6DAKCXZLChAVqZZW+DAKCXZLGhAVqaZXCDAKCXZLKhAVqbZXGDAKCXZLOhAVqcZWdlR2S0ZDlktY0DoJ1ktmS3hAChAVqeZWhkuIMBoJ1kuWS3hAChAVqfZWhkuoMBoJ1ku2S3hAChAVqg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Y29udmVydGVkIHRvCkx7TGl0ZXJhbH0gZXhwcmVzc2lvbnMpOjoKCiAgICBmcm9tIHB5cGFyc2luZyBpbXBvcnQgV29yZCwgYWxwaGFzCgogICAgIyBkZWZpbmUgZ3JhbW1hciBvZiBhIGdyZWV0aW5nCiAgICBncmVldCA9IFdvcmQoYWxwaGFzKSArICIsIiArIFdvcmQoYWxwaGFzKSArICIhIgoKICAgIGhlbGxvID0gIkhlbGxvLCBXb3JsZCEiCiAgICBwcmludCAoaGVsbG8sICItPiIsIGdyZWV0LnBhcnNlU3RyaW5nKGhlbGxvKSkKClRoZSBwcm9ncmFtIG91dHB1dHMgdGhlIGZvbGxvd2luZzo6CgogICAgSGVsbG8sIFdvcmxkISAtPiBbJ0hlbGxvJywgJywnLCAnV29ybGQnLCAnISddCgpUaGUgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBncmFtbWFyIGlzIHF1aXRlIHJlYWRhYmxlLCBvd2luZyB0byB0aGUgc2VsZi1leHBsYW5hdG9yeQpjbGFzcyBuYW1lcywgYW5kIHRoZSB1c2Ugb2YgJysnLCAnfCcgYW5kICdeJyBvcGVyYXRvcnMuCgpUaGUgTHtQYXJzZVJlc3VsdHN9IG9iamVjdCByZXR1cm5lZCBmcm9tIEx7UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZzxQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPn0gY2FuIGJlIGFjY2Vzc2VkIGFzIGEgbmVzdGVkIGxpc3QsIGEgZGljdGlvbmFyeSwgb3IgYW4Kb2JqZWN0IHdpdGggbmFtZWQgYXR0cmlidXRlcy4KClRoZSBweXBhcnNpbmcgbW9kdWxlIGhhbmRsZXMgc29tZSBvZiB0aGUgcHJvYmxlbXMgdGhhdCBhcmUgdHlwaWNhbGx5IHZleGluZyB3aGVuIHdyaXRpbmcgdGV4dCBwYXJzZXJzOgogLSBleHRyYSBvciBtaXNzaW5nIHdoaXRlc3BhY2UgKHRoZSBhYm92ZSBwcm9ncmFtIHdpbGwgYWxzbyBoYW5kbGUgIkhlbGxvLFdvcmxkISIsICJIZWxsbyAgLCAgV29ybGQgICEiLCBldGMuKQogLSBxdW90ZWQgc3RyaW5ncwogLSBlbWJlZGRlZCBjb21tZW50cwoKCkdldHRpbmcgU3RhcnRlZCAtCi0tLS0tLS0tLS0tLS0tLS0tClZpc2l0IHRoZSBjbGFzc2VzIEx7UGFyc2VyRWxlbWVudH0gYW5kIEx7UGFyc2VSZXN1bHRzfSB0byBzZWUgdGhlIGJhc2UgY2xhc3NlcyB0aGF0IG1vc3Qgb3RoZXIgcHlwYXJzaW5nCmNsYXNzZXMgaW5oZXJpdCBmcm9tLiBVc2UgdGhlIGRvY3N0cmluZ3MgZm9yIGV4YW1wbGVzIG9mIGhvdyB0bzoKIC0gY29uc3RydWN0IGxpdGVyYWwgbWF0Y2ggZXhwcmVzc2lvbnMgZnJvbSBMe0xpdGVyYWx9IGFuZCBMe0Nhc2VsZXNzTGl0ZXJhbH0gY2xhc3NlcwogLSBjb25zdHJ1Y3QgY2hhcmFjdGVyIHdvcmQtZ3JvdXAgZXhwcmVzc2lvbnMgdXNpbmcgdGhlIEx7V29yZH0gY2xhc3MKIC0gc2VlIGhvdyB0byBjcmVhdGUgcmVwZXRpdGl2ZSBleHByZXNzaW9ucyB1c2luZyBMe1plcm9Pck1vcmV9IGFuZCBMe09uZU9yTW9yZX0gY2xhc3NlcwogLSB1c2UgTHsnKyc8QW5kPn0sIEx7J3wnPE1hdGNoRmlyc3Q+fSwgTHsnXic8T3I+fSwgYW5kIEx7JyYnPEVhY2g+fSBvcGVyYXRvcnMgdG8gY29tYmluZSBzaW1wbGUgZXhwcmVzc2lvbnMgaW50byBtb3JlIGNvbXBsZXggb25lcwogLSBhc3NvY2lhdGUgbmFtZXMgd2l0aCB5b3VyIHBhcnNlZCByZXN1bHRzIHVzaW5nIEx7UGFyc2VyRWxlbWVudC5zZXRSZXN1bHRzTmFtZX0KIC0gZmluZCBzb21lIGhlbHBmdWwgZXhwcmVzc2lvbiBzaG9ydC1jdXRzIGxpa2UgTHtkZWxpbWl0ZWRMaXN0fSBhbmQgTHtvbmVPZn0KIC0gZmluZCBtb3JlIHVzZWZ1bCBjb21tb24gZXhwcmVzc2lvbnMgaW4gdGhlIEx7cHlwYXJzaW5nX2NvbW1vbn0gbmFtZXNwYWNlIGNsYXNzCnoFMi4yLjF6FTE4IFNlcCAyMDE4IDAwOjQ5IFVUQ3oqUGF1bCBNY0d1aXJlIDxwdG1jZ0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+6QAAAABOKQHaA3JlZikB2ghkYXRldGltZSkB2gVSTG9jaykB2ghJdGVyYWJsZSkB2g5NdXRhYmxlTWFwcGluZykB2gtPcmRlcmVkRGljdClp2gNBbmTaD0Nhc2VsZXNzS2V5d29yZNoPQ2FzZWxlc3NMaXRlcmFs2gpDaGFyc05vdElu2gdDb21iaW5l2gREaWN02gRFYWNo2gVFbXB0edoKRm9sbG93ZWRCedoHRm9yd2FyZNoKR29Ub0NvbHVtbtoFR3JvdXDaB0tleXdvcmTaB0xpbmVFbmTaCUxpbmVTdGFydNoHTGl0ZXJhbNoKTWF0Y2hGaXJzdNoHTm9NYXRjaNoGTm90QW552glPbmVPck1vcmXaCE9ubHlPbmNl2ghPcHRpb25hbNoCT3LaElBhcnNlQmFzZUV4Y2VwdGlvbtoTUGFyc2VFbGVtZW50RW5oYW5jZdoOUGFyc2VFeGNlcHRpb27aD1BhcnNlRXhwcmVzc2lvbtoTUGFyc2VGYXRhbEV4Y2VwdGlvbtoMUGFyc2VSZXN1bHRz2hRQYXJzZVN5bnRheEV4Y2VwdGlvbtoNUGFyc2VyRWxlbWVudNoMUXVvdGVkU3RyaW5n2hlSZWN1cnNpdmVHcmFtbWFyRXhjZXB0aW9u2gVSZWdleNoGU2tpcFRv2glTdHJpbmdFbmTaC1N0cmluZ1N0YXJ02ghTdXBwcmVzc9oFVG9rZW7aDlRva2VuQ29udmVydGVy2gVXaGl0ZdoEV29yZNoHV29yZEVuZNoJV29yZFN0YXJ02gpaZXJvT3JNb3Jl2glhbHBoYW51bXPaBmFscGhhc9oKYWxwaGFzOGJpdNoLYW55Q2xvc2VUYWfaCmFueU9wZW5UYWfaDWNTdHlsZUNvbW1lbnTaA2NvbNoSY29tbWFTZXBhcmF0ZWRMaXN02hBjb21tb25IVE1MRW50aXR52gxjb3VudGVkQXJyYXnaD2NwcFN0eWxlQ29tbWVudNoPZGJsUXVvdGVkU3RyaW5n2g9kYmxTbGFzaENvbW1lbnTaDWRlbGltaXRlZExpc3TaBmRpY3RPZtoOZG93bmNhc2VUb2tlbnPaBWVtcHR52gdoZXhudW1z2gtodG1sQ29tbWVudNoQamF2YVN0eWxlQ29tbWVudNoEbGluZdoHbGluZUVuZNoJbGluZVN0YXJ02gZsaW5lbm/aDG1ha2VIVE1MVGFnc9oLbWFrZVhNTFRhZ3PaDm1hdGNoT25seUF0Q29s2hFtYXRjaFByZXZpb3VzRXhwctoUbWF0Y2hQcmV2aW91c0xpdGVyYWzaCm5lc3RlZEV4cHLaD251bGxEZWJ1Z0FjdGlvbtoEbnVtc9oFb25lT2baB29wQXNzb2PaEm9wZXJhdG9yUHJlY2VkZW5jZdoKcHJpbnRhYmxlc9oIcHVuYzhiaXTaEnB5dGhvblN0eWxlQ29tbWVudNoMcXVvdGVkU3RyaW5n2gxyZW1vdmVRdW90ZXPaEXJlcGxhY2VIVE1MRW50aXR52gtyZXBsYWNlV2l0aNoKcmVzdE9mTGluZdoPc2dsUXVvdGVkU3RyaW5n2gZzcmFuZ2XaCXN0cmluZ0VuZNoLc3RyaW5nU3RhcnTaEHRyYWNlUGFyc2VBY3Rpb27aDXVuaWNvZGVTdHJpbmfaDHVwY2FzZVRva2Vuc9oNd2l0aEF0dHJpYnV0ZdoNaW5kZW50ZWRCbG9ja9oPb3JpZ2luYWxUZXh0Rm9y2gd1bmdyb3Vw2g1pbmZpeE5vdGF0aW9u2gtsb2NhdGVkRXhwctoJd2l0aENsYXNz2gpDbG9zZU1hdGNo2gh0b2tlbk1hcNoQcHlwYXJzaW5nX2NvbW1vbukDAAAAYwEAAAAAAAAAAAAAAAMAAAAIAAAAQwAAAHNkAAAAdAB8AHQBgwJyDnwAUwB6CnQCfACDAVcAUwAEAHQDeV4BAAEAAQB0AXwAgwGgBHQFoAahAGQBoQJ9AXQHZAKDAX0CfAKgCGQDZASEAKEBAQB8AqAJfAGhAQYAWQBTADAAZAVTACkGYRUBAABEcm9wLWluIHJlcGxhY2VtZW50IGZvciBzdHIob2JqKSB0aGF0IHRyaWVzIHRvIGJlIFVuaWNvZGUgZnJpZW5kbHkuIEl0IGZpcnN0IHRyaWVzCiAgICAgICAgICAgc3RyKG9iaikuIElmIHRoYXQgZmFpbHMgd2l0aCBhIFVuaWNvZGVFbmNvZGVFcnJvciwgdGhlbiBpdCB0cmllcyB1bmljb2RlKG9iaikuIEl0CiAgICAgICAgICAgdGhlbiA8IHJldHVybnMgdGhlIHVuaWNvZGUgb2JqZWN0IHwgZW5jb2RlcyBpdCB3aXRoIHRoZSBkZWZhdWx0IGVuY29kaW5nIHwgLi4uID4uCiAgICAgICAg2hF4bWxjaGFycmVmcmVwbGFjZXoGJiNcZCs7YwEAAAAAAAAAAAAAAAEAAAAGAAAAUwAAAHMkAAAAZAF0AHQBfABkAhkAZANkBIUCGQCDAYMBZANkAIUCGQAXAFMAKQVOegJcdXIBAAAA6QIAAADp/////ykC2gNoZXjaA2ludKkB2gF0qQByeQAAAPqSL2J1aWxkZGlyL2J1aWxkL0JVSUxEUk9PVC9hbHQtcHl0aG9uMzktc2V0dXB0b29scy01OC4zLjAtMi5lbDgueDg2XzY0L29wdC9hbHQvcHl0aG9uMzkvbGliL3B5dGhvbjMuOS9zaXRlLXBhY2thZ2VzL3NldHVwdG9vbHMvX3ZlbmRvci9weXBhcnNpbmcucHnaCDxsYW1iZGE+qwAAAPMAAAAAehdfdXN0ci48bG9jYWxzPi48bGFtYmRhPk4pCtoKaXNpbnN0YW5jZdoHdW5pY29kZdoDc3Ry2hJVbmljb2RlRW5jb2RlRXJyb3LaBmVuY29kZdoDc3lz2hJnZXRkZWZhdWx0ZW5jb2RpbmdyKQAAANoOc2V0UGFyc2VBY3Rpb27aD3RyYW5zZm9ybVN0cmluZykD2gNvYmraA3JldFoKeG1sY2hhcnJlZnJ5AAAAcnkAAAByegAAANoFX3VzdHKaAAAAcxIAAAAABQoBBAICAwoCDAIUAQgBDgFyiAAAAHo2c3VtIGxlbiBzb3J0ZWQgcmV2ZXJzZWQgbGlzdCB0dXBsZSBzZXQgYW55IGFsbCBtaW4gbWF4YwEAAAAAAAAAAAAAAAIAAAACAAAAYwAAAHMSAAAAfABdCn0BfAFWAAEAcQJkAFMAqQFOcnkAAAApAtoCLjDaAXlyeQAAAHJ5AAAAcnoAAADaCTxnZW5leHByPrcAAAByfAAAAHKMAAAA6QEAAABjAQAAAAAAAAAAAAAABQAAAAUAAABDAAAAczoAAABkAX0BZAJkA4QAZASgAKEARACDAX0CdAF8AXwCgwJEAF0UXAJ9A30EfACgAnwDfAShAn0AcSB8AFMAKQV6L0VzY2FwZSAmLCA8LCA+LCAiLCAnLCBldGMuIGluIGEgc3RyaW5nIG9mIGRhdGEuegUmPjwiJ2MBAAAAAAAAAAAAAAACAAAAAwAAAHMAAABzGgAAAHwAXRJ9AWQAfAEXAGQBFwBWAAEAcQJkAlMAKQP6ASb6ATtOcnkAAAApAnKKAAAA2gFzcnkAAAByeQAAAHJ6AAAAcowAAAC+AAAAcnwAAAB6Hl94bWxfZXNjYXBlLjxsb2NhbHM+LjxnZW5leHByPnoTYW1wIGd0IGx0IHF1b3QgYXBvcykD2gVzcGxpdNoDemlw2gdyZXBsYWNlKQXaBGRhdGHaDGZyb21fc3ltYm9sc9oKdG9fc3ltYm9sc9oFZnJvbV/aA3RvX3J5AAAAcnkAAAByegAAANoLX3htbF9lc2NhcGW5AAAAcwoAAAAABAQBEgESAQ4BcpkAAABjAAAAAAAAAAAAAAAAAAAAAAEAAABAAAAAcwwAAABlAFoBZABaAmQBUwApAtoKX0NvbnN0YW50c04pA9oIX19uYW1lX1/aCl9fbW9kdWxlX1/aDF9fcXVhbG5hbWVfX3J5AAAAcnkAAAByeQAAAHJ6AAAAcpoAAADDAAAAcwIAAAAIAXKaAAAA2gowMTIzNDU2Nzg5WgxBQkNERUZhYmNkZWbpXAAAANoAYwEAAAAAAAAAAAAAAAIAAAADAAAAYwAAAHMcAAAAfABdFH0BfAF0AGoBdgFyAnwBVgABAHECZABTAHKJAAAAKQLaBnN0cmluZ9oKd2hpdGVzcGFjZakCcooAAADaAWNyeQAAAHJ5AAAAcnoAAAByjAAAAMsAAAByfAAAAGMAAAAAAAAAAAAAAAAAAAAAAwAAAEAAAABzUAAAAGUAWgFkAFoCZAFaA2QTZARkBYQBWgRlBWQGZAeEAIMBWgZkCGQJhABaB2QKZAuEAFoIZAxkDYQAWglkFGQPZBCEAVoKZBFkEoQAWgtkA1MAKRVyHwAAAHo3YmFzZSBleGNlcHRpb24gY2xhc3MgZm9yIGFsbCBwYXJzaW5nIHJ1bnRpbWUgZXhjZXB0aW9uc3IBAAAATmMFAAAAAAAAAAAAAAAFAAAAAwAAAEMAAABzPgAAAHwCfABfAHwDZAB1AHIcfAF8AF8BZAF8AF8Cbgx8A3wAXwF8AXwAXwJ8BHwAXwN8AXwCfANmA3wAXwRkAFMAqQJOcqAAAAApBdoDbG9j2gNtc2faBHBzdHLaDXBhcnNlckVsZW1lbnTaBGFyZ3MpBdoEc2VsZnKoAAAAcqYAAABypwAAANoEZWxlbXJ5AAAAcnkAAAByegAAANoIX19pbml0X1/RAAAAcxAAAAAAAQYBCAEGAQgCBgEGAQYBehtQYXJzZUJhc2VFeGNlcHRpb24uX19pbml0X19jAgAAAAAAAAAAAAAAAgAAAAUAAABDAAAAcxYAAAB8AHwBagB8AWoBfAFqAnwBagODBFMAKQF6rQogICAgICAgIGludGVybmFsIGZhY3RvcnkgbWV0aG9kIHRvIHNpbXBsaWZ5IGNyZWF0aW5nIG9uZSB0eXBlIG9mIFBhcnNlRXhjZXB0aW9uIAogICAgICAgIGZyb20gYW5vdGhlciAtIGF2b2lkcyBoYXZpbmcgX19pbml0X18gc2lnbmF0dXJlIGNvbmZsaWN0cyBhbW9uZyBzdWJjbGFzc2VzCiAgICAgICAgKQRyqAAAAHKmAAAAcqcAAAByqQAAACkC2gNjbHPaAnBlcnkAAAByeQAAAHJ6AAAA2g9fZnJvbV9leGNlcHRpb27cAAAAcwIAAAAABnoiUGFyc2VCYXNlRXhjZXB0aW9uLl9mcm9tX2V4Y2VwdGlvbmMCAAAAAAAAAAAAAAACAAAAAwAAAEMAAABzTgAAAHwBZAFrAnIWdAB8AGoBfABqAoMCUwB8AWQCdgByLHQDfABqAXwAagKDAlMAfAFkA2sCckJ0BHwAagF8AGoCgwJTAHQFfAGDAYIBZARTACkFevdzdXBwb3J0ZWQgYXR0cmlidXRlcyBieSBuYW1lIGFyZToKICAgICAgICAgICAgLSBsaW5lbm8gLSByZXR1cm5zIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgZXhjZXB0aW9uIHRleHQKICAgICAgICAgICAgLSBjb2wgLSByZXR1cm5zIHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBleGNlcHRpb24gdGV4dAogICAgICAgICAgICAtIGxpbmUgLSByZXR1cm5zIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIGV4Y2VwdGlvbiB0ZXh0CiAgICAgICAgckwAAAApAnI7AAAA2gZjb2x1bW5ySQAAAE4pBnJMAAAAcqYAAAByqAAAAHI7AAAAckkAAADaDkF0dHJpYnV0ZUVycm9yKQJyqwAAANoFYW5hbWVyeQAAAHJ5AAAAcnoAAADaC19fZ2V0YXR0cl9f5AAAAHMOAAAAAAYIAQ4BCAEOAQgBDgJ6HlBhcnNlQmFzZUV4Y2VwdGlvbi5fX2dldGF0dHJfX2MBAAAAAAAAAAAAAAABAAAABQAAAEMAAABzGAAAAGQBfABqAHwAagF8AGoCfABqA2YEFgBTACkCTnoiJXMgKGF0IGNoYXIgJWQpLCAobGluZTolZCwgY29sOiVkKSkEcqcAAABypgAAAHJMAAAAcrEAAACpAXKrAAAAcnkAAAByeQAAAHJ6AAAA2gdfX3N0cl9f8wAAAHMGAAAAAAECARL/ehpQYXJzZUJhc2VFeGNlcHRpb24uX19zdHJfX2MBAAAAAAAAAAAAAAABAAAAAgAAAEMAAABzCAAAAHQAfACDAVMAcokAAACpAXKIAAAAcrUAAAByeQAAAHJ5AAAAcnoAAADaCF9fcmVwcl9f9gAAAHMCAAAAAAF6G1BhcnNlQmFzZUV4Y2VwdGlvbi5fX3JlcHJfX/oDPiE8YwIAAAAAAAAAAAAAAAQAAAAHAAAAQwAAAHM8AAAAfABqAH0CfABqAWQBGAB9A3wBcjRkAqACfAJkA3wDhQIZAHwBfAJ8A2QDhQIZAGYDoQF9AnwCoAOhAFMAKQR6hUV4dHJhY3RzIHRoZSBleGNlcHRpb24gbGluZSBmcm9tIHRoZSBpbnB1dCBzdHJpbmcsIGFuZCBtYXJrcwogICAgICAgICAgIHRoZSBsb2NhdGlvbiBvZiB0aGUgZXhjZXB0aW9uIHdpdGggYSBzcGVjaWFsIHN5bWJvbC4KICAgICAgICByjQAAAHKgAAAATikEckkAAABysQAAANoEam9pbtoFc3RyaXApBHKrAAAA2gxtYXJrZXJTdHJpbmfaCGxpbmVfc3Ry2gtsaW5lX2NvbHVtbnJ5AAAAcnkAAAByegAAANoNbWFya0lucHV0bGluZfgAAABzDgAAAAAEBgEKAQQBDgEM/wYCeiBQYXJzZUJhc2VFeGNlcHRpb24ubWFya0lucHV0bGluZWMBAAAAAAAAAAAAAAABAAAABAAAAEMAAABzFAAAAGQBoAChAHQBdAJ8AIMBgwEXAFMAKQJOeg9saW5lbm8gY29sIGxpbmUpA3KRAAAA2gNkaXLaBHR5cGVytQAAAHJ5AAAAcnkAAAByegAAANoHX19kaXJfXwIBAABzAgAAAAABehpQYXJzZUJhc2VFeGNlcHRpb24uX19kaXJfXykDcgEAAABOTikBcrkAAAApDHKbAAAAcpwAAABynQAAANoHX19kb2NfX3KtAAAA2gtjbGFzc21ldGhvZHKwAAAAcrQAAABytgAAAHK4AAAAcr8AAABywgAAAHJ5AAAAcnkAAAByeQAAAHJ6AAAAch8AAADNAAAAcxIAAAAIAQQDCgsCAQoHCA8IAwgCCgpyHwAAAGMAAAAAAAAAAAAAAAAAAAAAAQAAAEAAAABzEAAAAGUAWgFkAFoCZAFaA2QCUwApA3IhAAAAYU4CAAAKICAgIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBwYXJzZSBleHByZXNzaW9ucyBkb24ndCBtYXRjaCBjbGFzczsKICAgIHN1cHBvcnRlZCBhdHRyaWJ1dGVzIGJ5IG5hbWUgYXJlOgogICAgIC0gbGluZW5vIC0gcmV0dXJucyB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGV4Y2VwdGlvbiB0ZXh0CiAgICAgLSBjb2wgLSByZXR1cm5zIHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBleGNlcHRpb24gdGV4dAogICAgIC0gbGluZSAtIHJldHVybnMgdGhlIGxpbmUgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uIHRleHQKICAgICAgICAKICAgIEV4YW1wbGU6OgogICAgICAgIHRyeToKICAgICAgICAgICAgV29yZChudW1zKS5zZXROYW1lKCJpbnRlZ2VyIikucGFyc2VTdHJpbmcoIkFCQyIpCiAgICAgICAgZXhjZXB0IFBhcnNlRXhjZXB0aW9uIGFzIHBlOgogICAgICAgICAgICBwcmludChwZSkKICAgICAgICAgICAgcHJpbnQoImNvbHVtbjoge30iLmZvcm1hdChwZS5jb2wpKQogICAgICAgICAgICAKICAgIHByaW50czo6CiAgICAgICBFeHBlY3RlZCBpbnRlZ2VyIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKICAgICAgICBjb2x1bW46IDEKICAgIE6pBHKbAAAAcpwAAABynQAAAHLDAAAAcnkAAAByeQAAAHJ5AAAAcnoAAAByIQAAAAUBAABzBAAAAAgBBBJyIQAAAGMAAAAAAAAAAAAAAAAAAAAAAQAAAEAAAABzEAAAAGUAWgFkAFoCZAFaA2QCUwApA3IjAAAAem51c2VyLXRocm93YWJsZSBleGNlcHRpb24gdGhyb3duIHdoZW4gaW5jb25zaXN0ZW50IHBhcnNlIGNvbnRlbnQKICAgICAgIGlzIGZvdW5kOyBzdG9wcyBhbGwgcGFyc2luZyBpbW1lZGlhdGVseU5yxQAAAHJ5AAAAcnkAAAByeQAAAHJ6AAAAciMAAAAaAQAAcwQAAAAIAQQCciMAAABjAAAAAAAAAAAAAAAAAAAAAAEAAABAAAAAcxAAAABlAFoBZABaAmQBWgNkAlMAKQNyJQAAAHrfanVzdCBsaWtlIEx7UGFyc2VGYXRhbEV4Y2VwdGlvbn0sIGJ1dCB0aHJvd24gaW50ZXJuYWxseSB3aGVuIGFuCiAgICAgICBMe0Vycm9yU3RvcDxBbmQuX0Vycm9yU3RvcD59ICgnLScgb3BlcmF0b3IpIGluZGljYXRlcyB0aGF0IHBhcnNpbmcgaXMgdG8gc3RvcCAKICAgICAgIGltbWVkaWF0ZWx5IGJlY2F1c2UgYW4gdW5iYWNrdHJhY2thYmxlIHN5bnRheCBlcnJvciBoYXMgYmVlbiBmb3VuZE5yxQAAAHJ5AAAAcnkAAAByeQAAAHJ6AAAAciUAAAAfAQAAcwQAAAAIAQQDciUAAABjAAAAAAAAAAAAAAAAAAAAAAIAAABAAAAAcyAAAABlAFoBZABaAmQBWgNkAmQDhABaBGQEZAWEAFoFZAZTACkHcigAAAB6WmV4Y2VwdGlvbiB0aHJvd24gYnkgTHtQYXJzZXJFbGVtZW50LnZhbGlkYXRlfSBpZiB0aGUgZ3JhbW1hciBjb3VsZCBiZSBpbXByb3Blcmx5IHJlY3Vyc2l2ZWMCAAAAAAAAAAAAAAACAAAAAgAAAEMAAABzCgAAAHwBfABfAGQAUwByiQAAAKkB2hFwYXJzZUVsZW1lbnRUcmFjZakCcqsAAADaEHBhcnNlRWxlbWVudExpc3RyeQAAAHJ5AAAAcnoAAAByrQAAADQBAABzAgAAAAABeiJSZWN1cnNpdmVHcmFtbWFyRXhjZXB0aW9uLl9faW5pdF9fYwEAAAAAAAAAAAAAAAEAAAACAAAAQwAAAHMKAAAAZAF8AGoAFgBTACkCTnodUmVjdXJzaXZlR3JhbW1hckV4Y2VwdGlvbjogJXNyxgAAAHK1AAAAcnkAAAByeQAAAHJ6AAAAcrYAAAA3AQAAcwIAAAAAAXohUmVjdXJzaXZlR3JhbW1hckV4Y2VwdGlvbi5fX3N0cl9fTikGcpsAAABynAAAAHKdAAAAcsMAAAByrQAAAHK2AAAAcnkAAAByeQAAAHJ5AAAAcnoAAAByKAAAADIBAABzBgAAAAgBBAEIA3IoAAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHMsAAAAZQBaAWQAWgJkAWQChABaA2QDZASEAFoEZAVkBoQAWgVkB2QIhABaBmQJUwApCtoXX1BhcnNlUmVzdWx0c1dpdGhPZmZzZXRjAwAAAAAAAAAAAAAAAwAAAAIAAABDAAAAcw4AAAB8AXwCZgJ8AF8AZABTAHKJAAAAqQHaA3R1cCkDcqsAAADaAnAx2gJwMnJ5AAAAcnkAAAByegAAAHKtAAAAOwEAAHMCAAAAAAF6IF9QYXJzZVJlc3VsdHNXaXRoT2Zmc2V0Ll9faW5pdF9fYwIAAAAAAAAAAAAAAAIAAAACAAAAQwAAAHMKAAAAfABqAHwBGQBTAHKJAAAAcssAAACpAnKrAAAA2gFpcnkAAAByeQAAAHJ6AAAA2gtfX2dldGl0ZW1fXz0BAABzAgAAAAABeiNfUGFyc2VSZXN1bHRzV2l0aE9mZnNldC5fX2dldGl0ZW1fX2MBAAAAAAAAAAAAAAABAAAAAwAAAEMAAABzDgAAAHQAfABqAWQBGQCDAVMAqQJOcgEAAAApAtoEcmVwcnLMAAAAcrUAAAByeQAAAHJ5AAAAcnoAAAByuAAAAD8BAABzAgAAAAABeiBfUGFyc2VSZXN1bHRzV2l0aE9mZnNldC5fX3JlcHJfX2MCAAAAAAAAAAAAAAACAAAAAgAAAEMAAABzFAAAAHwAagBkARkAfAFmAnwAXwBkAFMActIAAAByywAAAHLPAAAAcnkAAAByeQAAAHJ6AAAA2glzZXRPZmZzZXRBAQAAcwIAAAAAAXohX1BhcnNlUmVzdWx0c1dpdGhPZmZzZXQuc2V0T2Zmc2V0TikHcpsAAABynAAAAHKdAAAAcq0AAABy0QAAAHK4AAAActQAAAByeQAAAHJ5AAAAcnkAAAByegAAAHLKAAAAOgEAAHMIAAAACAEIAggCCAJyygAAAGMAAAAAAAAAAAAAAAAAAAAABQAAAEAAAABznAEAAGUAWgFkAFoCZAFaA2RbZARkBYQBWgRkAmQCZANkA2UFZgVkBmQHhAFaBmQIZAmEAFoHZQVmAWQKZAuEAVoIZAxkDYQAWglkDmQPhABaCmQQZBGEAFoLZBJkE4QAWgxlDFoNZBRkFYQAWg5kFmQXhABaD2QYZBmEAFoQZBpkG4QAWhFkHGQdhABaEmUTcpxlEFoUZRFaFWUSWhZuJGUQWhdlEVoYZRJaGWQeZB+EAFoUZCBkIYQAWhVkImQjhABaFmQkZCWEAFoaZCZkJ4QAWhtkXGQoZCmEAVocZCpkK4QAWh1kLGQthABaHmQuZC+EAFofZDBkMYQAWiBkMmQzhABaIWQ0ZDWEAFoiZDZkN4QAWiNkOGQ5hABaJGQ6ZDuEAFolZDxkPYQAWiZkXWQ/ZECEAVonZEFkQoQAWihkQ2REhABaKWRFZEaEAFoqZF5kSGRJhAFaK2RKZEuEAFosZExkTYQAWi1kX2RPZFCEAVouZFFkUoQAWi9kU2RUhABaMGRVZFaEAFoxZFdkWIQAWjJkWWRahABaM2QCUwApYHIkAAAAYUkFAAAKICAgIFN0cnVjdHVyZWQgcGFyc2UgcmVzdWx0cywgdG8gcHJvdmlkZSBtdWx0aXBsZSBtZWFucyBvZiBhY2Nlc3MgdG8gdGhlIHBhcnNlZCBkYXRhOgogICAgICAgLSBhcyBhIGxpc3QgKEN7bGVuKHJlc3VsdHMpfSkKICAgICAgIC0gYnkgbGlzdCBpbmRleCAoQ3tyZXN1bHRzWzBdLCByZXN1bHRzWzFdfSwgZXRjLikKICAgICAgIC0gYnkgYXR0cmlidXRlIChDe3Jlc3VsdHMuPHJlc3VsdHNOYW1lPn0gLSBzZWUgTHtQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lfSkKCiAgICBFeGFtcGxlOjoKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIGRhdGVfc3RyID0gKGludGVnZXIuc2V0UmVzdWx0c05hbWUoInllYXIiKSArICcvJyAKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJtb250aCIpICsgJy8nIAogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoImRheSIpKQogICAgICAgICMgZXF1aXZhbGVudCBmb3JtOgogICAgICAgICMgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKCiAgICAgICAgIyBwYXJzZVN0cmluZyByZXR1cm5zIGEgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikKCiAgICAgICAgZGVmIHRlc3QocywgZm49cmVwcik6CiAgICAgICAgICAgIHByaW50KCIlcyAtPiAlcyIgJSAocywgZm4oZXZhbChzKSkpKQogICAgICAgIHRlc3QoImxpc3QocmVzdWx0KSIpCiAgICAgICAgdGVzdCgicmVzdWx0WzBdIikKICAgICAgICB0ZXN0KCJyZXN1bHRbJ21vbnRoJ10iKQogICAgICAgIHRlc3QoInJlc3VsdC5kYXkiKQogICAgICAgIHRlc3QoIidtb250aCcgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCInbWludXRlcycgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCJyZXN1bHQuZHVtcCgpIiwgc3RyKQogICAgcHJpbnRzOjoKICAgICAgICBsaXN0KHJlc3VsdCkgLT4gWycxOTk5JywgJy8nLCAnMTInLCAnLycsICczMSddCiAgICAgICAgcmVzdWx0WzBdIC0+ICcxOTk5JwogICAgICAgIHJlc3VsdFsnbW9udGgnXSAtPiAnMTInCiAgICAgICAgcmVzdWx0LmRheSAtPiAnMzEnCiAgICAgICAgJ21vbnRoJyBpbiByZXN1bHQgLT4gVHJ1ZQogICAgICAgICdtaW51dGVzJyBpbiByZXN1bHQgLT4gRmFsc2UKICAgICAgICByZXN1bHQuZHVtcCgpIC0+IFsnMTk5OScsICcvJywgJzEyJywgJy8nLCAnMzEnXQogICAgICAgIC0gZGF5OiAzMQogICAgICAgIC0gbW9udGg6IDEyCiAgICAgICAgLSB5ZWFyOiAxOTk5CiAg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CIkAdAOHAGYBZANkBIQIfAGDAEQAgwGDAVMAKQVhwwMAAAogICAgICAgIFJldHVybnMgdGhlIG5hbWVkIHBhcnNlIHJlc3VsdHMgYXMgYSBuZXN0ZWQgZGljdGlvbmFyeS4KCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCiAgICAgICAgICAgIAogICAgICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygnMTIvMzEvMTk5OScpCiAgICAgICAgICAgIHByaW50KHR5cGUocmVzdWx0KSwgcmVwcihyZXN1bHQpKSAjIC0+IDxjbGFzcyAncHlwYXJzaW5nLlBhcnNlUmVzdWx0cyc+IChbJzEyJywgJy8nLCAnMzEnLCAnLycsICcxOTk5J10sIHsnZGF5JzogWygnMTk5OScsIDQpXSwgJ3llYXInOiBbKCcxMicsIDApXSwgJ21vbnRoJzogWygnMzEnLCAyKV19KQogICAgICAgICAgICAKICAgICAgICAgICAgcmVzdWx0X2RpY3QgPSByZXN1bHQuYXNEaWN0KCkKICAgICAgICAgICAgcHJpbnQodHlwZShyZXN1bHRfZGljdCksIHJlcHIocmVzdWx0X2RpY3QpKSAjIC0+IDxjbGFzcyAnZGljdCc+IHsnZGF5JzogJzE5OTknLCAneWVhcic6ICcxMicsICdtb250aCc6ICczMSd9CgogICAgICAgICAgICAjIGV2ZW4gdGhvdWdoIGEgUGFyc2VSZXN1bHRzIHN1cHBvcnRzIGRpY3QtbGlrZSBhY2Nlc3MsIHNvbWV0aW1lIHlvdSBqdXN0IG5lZWQgdG8gaGF2ZSBhIGRpY3QKICAgICAgICAgICAgaW1wb3J0IGpzb24KICAgICAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhyZXN1bHQpKSAjIC0+IEV4Y2VwdGlvbjogVHlwZUVycm9yOiAuLi4gaXMgbm90IEpTT04gc2VyaWFsaXphYmxlCiAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0LmFzRGljdCgpKSkgIyAtPiB7Im1vbnRoIjogIjMxIiwgImRheSI6ICIxOTk5IiwgInllYXIiOiAiMTIifQogICAgICAgIGMBAAAAAAAAAAAAAAABAAAAAwAAABMAAABzNgAAAHQAfAB0AYMCci58AKACoQByGnwAoAOhAFMAhwBmAWQBZAKECHwARACDAVMAbgR8AFMAZABTACkDTmMBAAAAAAAAAAAAAAACAAAABAAAABMAAABzFAAAAGcAfABdDH0BiAB8AYMBkQJxBFMAcnkAAAByeQAAAHLuAAAAqQHaBnRvSXRlbXJ5AAAAcnoAAABy8AAAAO0CAAByfAAAAHo3UGFyc2VSZXN1bHRzLmFzRGljdC48bG9jYWxzPi50b0l0ZW0uPGxvY2Fscz4uPGxpc3Rjb21wPikEcn0AAAByJAAAAHIaAQAA2gZhc0RpY3QpAXKGAAAAckEBAAByeQAAAHJ6AAAAckIBAADoAgAAcwoAAAAAAQoBCAEIAhQCeiNQYXJzZVJlc3VsdHMuYXNEaWN0Ljxsb2NhbHM+LnRvSXRlbWMBAAAAAAAAAAAAAAADAAAABAAAADMAAABzHgAAAHwAXRZcAn0BfQJ8AYgAfAKDAWYCVgABAHECZABTAHKJAAAAcnkAAACpA3KKAAAAcvQAAABy7wAAAHJBAQAAcnkAAAByegAAAHKMAAAA8QIAAHJ8AAAAeiZQYXJzZVJlc3VsdHMuYXNEaWN0Ljxsb2NhbHM+LjxnZW5leHByPikE2gRQWV8zcvwAAAByGAEAAHLmAAAAKQJyqwAAANoHaXRlbV9mbnJ5AAAAckEBAAByegAAAHJDAQAA0AIAAHMKAAAAABMEAQgCBgIMCXoTUGFyc2VSZXN1bHRzLmFzRGljdGMBAAAAAAAAAAAAAAACAAAAAwAAAEMAAABzOAAAAHQAfABqAYMBfQF8AGoCoAOhAHwBXwJ8AGoEfAFfBHwBagWgBnwAagWhAQEAfABqB3wBXwd8AVMAKQF6QQogICAgICAgIFJldHVybnMgYSBuZXcgY29weSBvZiBhIEN7UGFyc2VSZXN1bHRzfSBvYmplY3QuCiAgICAgICAgKQhyJAAAAHLkAAAAcucAAABy6QAAAHLfAAAAcuAAAAByMwEAAHLeAAAAqQJyqwAAAHKHAAAAcnkAAAByeQAAAHJ6AAAAcukAAADzAgAAcwwAAAAABAoBDAEIAQ4BCAF6EVBhcnNlUmVzdWx0cy5jb3B5RmMFAAAAAAAAAAAAAAAOAAAACwAAAEMAAABzTAEAAGQBfQVnAH0GdABkAmQDhAB8AGoBoAKhAEQAgwGDAX0HfANkBBcAfQh8BHM4ZAV9A2QFfQhkBX0FZAZ9CXwBZAZ1AXJKfAF9CW4MfABqA3JWfABqA30JfAlzZnwCcmJkBVMAZAd9CXwGfAV8A2QIfAlkCWcFNwB9BnQEfABqBYMBRABdrFwCfQp9C3QGfAt0B4MCcuB8CnwHdgBywHwGfAugCHwHfAoZAHwCb7J8AWQGdQB8CHwEoQRnATcAfQZuHnwGfAugCGQGfAJv0nwBZAZ1AHwIfAShBGcBNwB9BnGCZAZ9DHwKfAd2AHL0fAd8ChkAfQx8DJABcwh8ApABcgRxgm4EZAd9DHQJdAp8C4MBgwF9DXwGfAV8CGQIfAxkCXwNZAp8DGQJZwk3AH0GcYJ8BnwFfANkCnwJZAlnBTcAfQZkBaALfAahAVMAKQt6hwogICAgICAgIChEZXByZWNhdGVkKSBSZXR1cm5zIHRoZSBwYXJzZSByZXN1bHRzIGFzIFhNTC4gVGFncyBhcmUgY3JlYXRlZCBmb3IgdG9rZW5zIGFuZCBsaXN0cyB0aGF0IGhhdmUgZGVmaW5lZCByZXN1bHRzIG5hbWVzLgogICAgICAgINoBCmMBAAAAAAAAAAAAAAAEAAAABAAAAHMAAABzKAAAAHwAXSBcAn0BfQJ8AkQAXRJ9A3wDZAAZAHwBZgJWAAEAcQ5xAmQBUwCpAnKNAAAATnJ5AAAAcjABAAByeQAAAHJ5AAAAcnoAAAByjAAAAAQDAABzBAAAAAoBCP96JVBhcnNlUmVzdWx0cy5hc1hNTC48bG9jYWxzPi48Z2VuZXhwcj76AiAgcqAAAABO2gRJVEVN+gE8+gE++gI8LykMcuYAAABy5wAAAHL8AAAAct4AAABy/QAAAHLkAAAAcn0AAAByJAAAANoFYXNYTUxymQAAAHKIAAAAcroAAAApDnKrAAAA2gZkb2N0YWfaDm5hbWVkSXRlbXNPbmx52gZpbmRlbnTaCWZvcm1hdHRlZNoCbmxyPwEAANoKbmFtZWRJdGVtc9oPbmV4dExldmVsSW5kZW502gdzZWxmVGFnctAAAAByQAEAANoGcmVzVGFn2gt4bWxCb2R5VGV4dHJ5AAAAcnkAAAByegAAAHJPAQAA/gIAAHNaAAAAAAQEAQQBGAIIAwQBBAEEAQQCBAEIAQYCBgEGAgQBBAEEAgQCEgISAQoBCAEMAQoBAgEC/QoFCAEKAQIBAv0KBgQBCAEIAQYBBgEEAgQBDAEMAQIBBv4IBBIBehJQYXJzZVJlc3VsdHMuYXNYTUxjAgAAAAAAAAAAAAAABgAAAAQAAABDAAAAczoAAAB8AGoAoAGhAEQAXSpcAn0CfQN8A0QAXRxcAn0EfQV8AXwEdQByFnwCAgABAAIAAQBTAHEWcQpkAFMAcokAAAApAnLnAAAAcvwAAAApBnKrAAAAcvUAAABy9AAAAHIxAQAAcu8AAABypgAAAHJ5AAAAcnkAAAByegAAANoIX19sb29rdXA7AwAAcwoAAAAAARIBDAEIARABehVQYXJzZVJlc3VsdHMuX19sb29rdXBjAQAAAAAAAAAAAAAAAgAAAAQAAABDAAAAc4AAAAB8AGoAcgx8AGoAUwB8AGoBci58AKABoQB9AXwBcih8AaACfAChAVMAZAFTAG5OdAN8AIMBZAJrAnJ4dAN8AGoEgwFkAmsCcnh0BXQGfABqBKAHoQCDAYMBZAMZAGQCGQBkBHYAcnh0BXQGfABqBKAIoQCDAYMBUwBkAVMAZAFTACkFYSgDAAAKICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHRzIG5hbWUgZm9yIHRoaXMgdG9rZW4gZXhwcmVzc2lvbi4gVXNlZnVsIHdoZW4gc2V2ZXJhbCAKICAgICAgICBkaWZmZXJlbnQgZXhwcmVzc2lvbnMgbWlnaHQgbWF0Y2ggYXQgYSBwYXJ0aWN1bGFyIGxvY2F0aW9uLgoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICAgICAgc3NuX2V4cHIgPSBSZWdleChyIlxkXGRcZC1cZFxkLVxkXGRcZFxkIikKICAgICAgICAgICAgaG91c2VfbnVtYmVyX2V4cHIgPSBTdXBwcmVzcygnIycpICsgV29yZChudW1zLCBhbHBoYW51bXMpCiAgICAgICAgICAgIHVzZXJfZGF0YSA9IChHcm91cChob3VzZV9udW1iZXJfZXhwcikoImhvdXNlX251bWJlciIpIAogICAgICAgICAgICAgICAgICAgICAgICB8IEdyb3VwKHNzbl9leHByKSgic3NuIikKICAgICAgICAgICAgICAgICAgICAgICAgfCBHcm91cChpbnRlZ2VyKSgiYWdlIikpCiAgICAgICAgICAgIHVzZXJfaW5mbyA9IE9uZU9yTW9yZSh1c2VyX2RhdGEpCiAgICAgICAgICAgIAogICAgICAgICAgICByZXN1bHQgPSB1c2VyX2luZm8ucGFyc2VTdHJpbmcoIjIyIDExMS0yMi0zMzMzICMyMjFCIikKICAgICAgICAgICAgZm9yIGl0ZW0gaW4gcmVzdWx0OgogICAgICAgICAgICAgICAgcHJpbnQoaXRlbS5nZXROYW1lKCksICc6JywgaXRlbVswXSkKICAgICAgICBwcmludHM6OgogICAgICAgICAgICBhZ2UgOiAyMgogICAgICAgICAgICBzc24gOiAxMTEtMjItMzMzMwogICAgICAgICAgICBob3VzZV9udW1iZXIgOiAyMjFCCiAgICAgICAgTnKNAAAAcgEAAAApAnIBAAAAcnQAAAApCXLeAAAAct8AAADaFV9QYXJzZVJlc3VsdHNfX2xvb2t1cHL4AAAAcucAAADaBG5leHRyCgEAAHIXAQAAchUBAAApAnKrAAAA2gNwYXJyeQAAAHJ5AAAAcnoAAADaB2dldE5hbWVCAwAAcxwAAAAAFgYBBgEGAQgBBAEKAgYBDAEM/wICHP4CAxICehRQYXJzZVJlc3VsdHMuZ2V0TmFtZXIBAAAAYwQAAAAAAAAAAAAAAAsAAAAOAAAAQwAAAHNaAQAAZwB9BGQBfQV8BKAAfAF0AXwAoAKhAIMBFwChAQEAfAOQAXJQfACgA6EAcrx0BGQCZAOEAHwAoAWhAEQAgwGDAX0GfAZEAF1yXAJ9B30IfARyXHwEoAB8BaEBAQB8BKAAZAR8AWQFfAIUAHwHZgMWAKEBAQB0BnwIdAeDAnKqfAhymnwEoAB8CKAIfAF8AmQGFwChAqEBAQBxuHwEoAB0AXwIgwGhAQEAcUZ8BKAAdAl8CIMBoQEBAHFGbpR0CmQHZAOEAHwARACDAYMBkAFyUHwAfQh0C3wIgwFEAF1yXAJ9CX0KdAZ8CnQHgwKQAXIkfASgAGQIfAFkBXwCFAB8CXwBZAV8AmQGFwAUAHwKoAh8AXwCZAYXAKECZgYWAKEBAQBx3HwEoABkCHwBZAV8AhQAfAl8AWQFfAJkBhcAFAB0AXwKgwFmBhYAoQEBAHHcZAmgDHwEoQFTACkKYUgCAAAKICAgICAgICBEaWFnbm9zdGljIG1ldGhvZCBmb3IgbGlzdGluZyBvdXQgdGhlIGNvbnRlbnRzIG9mIGEgQ3tQYXJzZVJlc3VsdHN9LgogICAgICAgIEFjY2VwdHMgYW4gb3B0aW9uYWwgQ3tpbmRlbnR9IGFyZ3VtZW50IHNvIHRoYXQgdGhpcyBzdHJpbmcgY2FuIGJlIGVtYmVkZGVkCiAgICAgICAgaW4gYSBuZXN0ZWQgZGlzcGxheSBvZiBvdGhlciBkYXRhLgoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKICAgICAgICAgICAgCiAgICAgICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCcxMi8zMS8xOTk5JykKICAgICAgICAgICAgcHJpbnQocmVzdWx0LmR1bXAoKSkKICAgICAgICBwcmludHM6OgogICAgICAgICAgICBbJzEyJywgJy8nLCAnMzEnLCAnLycsICcxOTk5J10KICAgICAgICAgICAgLSBkYXk6IDE5OTkKICAgICAgICAgICAgLSBtb250aDogMzEKICAgICAgICAgICAgLSB5ZWFyOiAxMgogICAgICAgIHJIAQAAYwEAAAAAAAAAAAAAAAMAAAADAAAAcwAAAHMeAAAAfABdFlwCfQF9AnQAfAGDAXwCZgJWAAEAcQJkAFMAcokAAAApAXJ/AAAAckQBAAByeQAAAHJ5AAAAcnoAAAByjAAAAH4DAAByfAAAAHokUGFyc2VSZXN1bHRzLmR1bXAuPGxvY2Fscz4uPGdlbmV4cHI+egolcyVzLSAlczogckoBAAByjQAAAGMBAAAAAAAAAAAAAAACAAAABAAAAHMAAABzGAAAAHwAXRB9AXQAfAF0AYMCVgABAHECZABTAHKJAAAAKQJyfQAAAHIkAAAAKQJyigAAANoCdnZyeQAAAHJ5AAAAcnoAAAByjAAAAIoDAAByfAAAAHoRCiVzJXNbJWRdOgolcyVzJXNyoAAAACkNciQBAAByiAAAAHLbAAAAchoBAADaBnNvcnRlZHL8AAAAcn0AAAByJAAAANoEZHVtcHLTAAAA2gNhbnly/QAAAHK6AAAAKQtyqwAAAHJSAQAA2gVkZXB0aNoEZnVsbHI/AQAA2gJOTHL8AAAAcvQAAABy7wAAAHLQAAAAcl8BAAByeQAAAHJ5AAAAcnoAAAByYQEAAGcDAABzLAAAAAASBAEEARYBBgEIARYBDAEEAQoBGAEKAQQBGAIQAhIBFAEEARABDAE0AiwCehFQYXJzZVJlc3VsdHMuZHVtcGMBAAAAAAAAAAAAAAADAAAABAAAAE8AAABzIAAAAHQAagB8AKABoQBnAXwBogFSAGkAfAKkAY4BAQBkAVMAKQJh9QIAAAogICAgICAgIFByZXR0eS1wcmludGVyIGZvciBwYXJzZWQgcmVzdWx0cyBhcyBhIGxpc3QsIHVzaW5nIHRoZSBDe3BwcmludH0gbW9kdWxlLgogICAgICAgIEFjY2VwdHMgYWRkaXRpb25hbCBwb3NpdGlvbmFsIG9yIGtleXdvcmQgYXJncyBhcyBkZWZpbmVkIGZvciB0aGUgCiAgICAgICAgQ3twcHJpbnQucHByaW50fSBtZXRob2QuIChVe2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5wcHJpbnR9KQoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKQogICAgICAgICAgICBudW0gPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGZ1bmMgPSBGb3J3YXJkKCkKICAgICAgICAgICAgdGVybSA9IGlkZW50IHwgbnVtIHwgR3JvdXAoJygnICsgZnVuYyArICcpJykKICAgICAgICAgICAgZnVuYyA8PD0gaWRlbnQgKyBHcm91cChPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHRlcm0pKSkKICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5wYXJzZVN0cmluZygiZm5hIGEsYiwoZm5iIGMsZCwyMDApLDEwMCIpCiAgICAgICAgICAgIHJlc3VsdC5wcHJpbnQod2lkdGg9NDApCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgWydmbmEnLAogICAgICAgICAgICAgWydhJywKICAgICAgICAgICAgICAnYicsCiAgICAgICAgICAgICAgWycoJywgJ2ZuYicsIFsnYycsICdkJywgJzIwMCddLCAnKSddLAogICAgICAgICAgICAgICcxMDAnXV0KICAgICAgICBOKQLaBnBwcmludHLbAAAAqQNyqwAAAHKqAAAAchwBAAByeQAAAHJ5AAAAcnoAAAByZgEAAJQDAABzAgAAAAAVehNQYXJzZVJlc3VsdHMucHByaW50YwEAAAAAAAAAAAAAAAEAAAAFAAAAQwAAAHMuAAAAfABqAHwAagGgAqEAfABqA2QAdQFyHnwAoAOhAHAgZAB8AGoEfABqBWYEZgJTAHKJAAAAKQZy5AAAAHLnAAAAcukAAABy3wAAAHLgAAAAct4AAABytQAAAHJ5AAAAcnkAAAByegAAANoMX19nZXRzdGF0ZV9frAMAAHMOAAAAAAEEAQgBFAEEAQT9Av96GVBhcnNlUmVzdWx0cy5fX2dldHN0YXRlX19jAgAAAAAAAAAAAAAABAAAAAUAAABDAAAAc04AAAB8AWQBGQB8AF8AfAFkAhkAXAR8AF8BfQJ9A3wAXwJpAHwAXwN8AGoDoAR8A6EBAQB8AmQAdQFyRHQFfAKDAXwAXwZuBmQAfABfBmQAUwBy9wAAACkHcuQAAABy5wAAAHLeAAAAcuAAAAByMwEAAHLzAAAAct8AAAApBHKrAAAA2gVzdGF0ZXJdAQAA2gxpbkFjY3VtTmFtZXNyeQAAAHJ5AAAAcnoAAADaDF9fc2V0c3RhdGVfX7MDAABzFgAAAAABCgQG/QYBAgECAQQBBgEMAQgBDAJ6GVBhcnNlUmVzdWx0cy5fX3NldHN0YXRlX19jAQAAAAAAAAAAAAAAAQAAAAQAAABDAAAAcxQAAAB8AGoAfABqAXwAagJ8AGoDZgRTAHKJAAAAKQRy5AAAAHLeAAAAcuEAAABy4gAAAHK1AAAAcnkAAAByeQAAAHJ6AAAA2g5fX2dldG5ld2FyZ3NfX8ADAABzAgAAAAABehtQYXJzZVJlc3VsdHMuX19nZXRuZXdhcmdzX19jAQAAAAAAAAAAAAAAAQAAAAQAAABDAAAAcxgAAAB0AHQBfACDAYMBdAJ8AKADoQCDARcAUwByiQAAACkEcsAAAABywQAAAHLjAAAAchUBAABytQAAAHJ5AAAAcnkAAAByegAAAHLCAAAAwwMAAHMCAAAAAAF6FFBhcnNlUmVzdWx0cy5fX2Rpcl9fKQROTlRUKQFOKQFyoAAAACkETkZyoAAAAFQpA3KgAAAAcgEAAABUKTRymwAAAHKcAAAAcp0AAABywwAAAHLXAAAAcn0AAAByrQAAAHLRAAAAcvYAAAByBAEAAHIFAQAAcgYBAAByCAEAANoLX19ub256ZXJvX19yCwEAAHINAQAAchABAAByEwEAAHIUAQAAckUBAAByFQEAAHIXAQAAcvwAAAByDgEAAHIWAQAAchgBAAByGgEAAHIfAQAAcvIAAAByIgEAAHIkAQAAciYBAAByKAEAAHK0AAAAciwBAAByNgEAAHI4AQAAcrgAAABytgAAAHI9AQAActsAAAByQwEAAHLpAAAAck8BAAByWwEAAHJeAQAAcmEBAAByZgEAAHJoAQAAcmsBAABybAEAAHLCAAAAcnkAAAByeQAAAHJ5AAAAcnoAAAByJAAAAEQBAABzaAAAAAgBBCYKCRQnCAkMDQgVCAMIAQgBBAEIAQgBCAYIAwgDBAEEAwQDBAECAwQDBAMEAwgECAQIBAgFCDQKFggUCA4IEggHCA4IBQgQCAgIAwgDCgsIEAgjCAsKPQgHCCUKLQgYCAcIDQgDciQAAABjAgAAAAAAAAAAAAAAAwAAAAYAAABDAAAAc0YAAAB8AX0CZAF8AAQAAwBrAHIcdAB8AoMBawByNG4EAQBuFHwCfABkAhgAGQBkA2sCcjRkAlMAfAB8AqABZANkAXwAoQMYAFMAKQRhBAIAAFJldHVybnMgY3VycmVudCBjb2x1bW4gd2l0aGluIGEgc3RyaW5nLCBjb3VudGluZyBuZXdsaW5lcyBhcyBsaW5lIHNlcGFyYXRvcnMuCiAgIFRoZSBmaXJzdCBjb2x1bW4gaXMgbnVtYmVyIDEuCgogICBOb3RlOiB0aGUgZGVmYXVsdCBwYXJzaW5nIGJlaGF2aW9yIGlzIHRvIGV4cGFuZCB0YWJzIGluIHRoZSBpbnB1dCBzdHJpbmcKICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUgTHtJe1BhcnNlckVsZW1lbnQucGFyc2VTdHJpbmd9PFBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmc+fSBmb3IgbW9yZSBpbmZvcm1hdGlvbgogICBvbiBwYXJzaW5nIHN0cmluZ3MgY29udGFpbmluZyBDezxUQUI+fXMsIGFuZCBzdWdnZXN0ZWQgbWV0aG9kcyB0byBtYWludGFpbiBhCiAgIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgcGFyc2VkIHN0cmluZywgdGhlIHBhcnNlIGxvY2F0aW9uLCBhbmQgbGluZSBhbmQgY29sdW1uCiAgIHBvc2l0aW9ucyB3aXRoaW4gdGhlIHBhcnNlZCBzdHJpbmcuCiAgIHIBAAAAco0AAABySAEAACkCcvgAAADaBXJmaW5kKQNypgAAANoEc3RyZ3KQAAAAcnkAAAByeQAAAHJ6AAAAcjsAAADIAwAAcwQAAAAACgQBcjsAAABjAgAAAAAAAAAAAAAAAgAAAAUAAABDAAAAcxIAAAB8AaAAZAFkAnwAoQNkAxcAUwApBGEHAgAAUmV0dXJucyBjdXJyZW50IGxpbmUgbnVtYmVyIHdpdGhpbiBhIHN0cmluZywgY291bnRpbmcgbmV3bGluZXMgYXMgbGluZSBzZXBhcmF0b3JzLgogICBUaGUgZmlyc3QgbGluZSBpcyBudW1iZXIgMS4KCiAgIE5vdGU6IHRoZSBkZWZhdWx0IHBhcnNpbmcgYmVoYXZpb3IgaXMgdG8gZXhwYW5kIHRhYnMgaW4gdGhlIGlucHV0IHN0cmluZwogICBiZWZvcmUgc3RhcnRpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIFNlZSBMe0l7UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ308UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZz59IGZvciBtb3JlIGluZm9ybWF0aW9uCiAgIG9uIHBhcnNpbmcgc3RyaW5ncyBjb250YWluaW5nIEN7PFRBQj59cywg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AABykQEAAHKIAQAA2glMSU5FX0RJRkbaCXRoaXNfbGluZXKTAQAA2glmdW5jX25hbWVyeQAAAHKPAQAAcnoAAADaC190cmltX2FyaXR5DwQAAHMsAAAAAAEIAQwBBgEGAxABCgUMBQYBBgUEAw4BFAIWGAQBAgEGAQr/CAIMAQ4BBgJymwEAAGMAAAAAAAAAAAAAAAAAAAAABQAAAAAAAABzkgIAAGUAWgFkAFoCZAFaA2QCWgRkA1oFZQZkBGQFhACDAVoHZQZkBmQHhACDAVoIZIZkCGQJhAFaCWQKZAuEAFoKZAxkDYQAWgtkh2QOZA+EAVoMZIhkEWQShAFaDWQTZBSEAFoOZBVkFoQAWg9kF2QYhABaEGQZZBqEAFoRZBtkHIQAWhJkHWQehABaE2SJZB9kIIQBWhRkIWQihABaFWSKZCNkJIQBWhZkJWQmhABaF2QnZCiEAFoYRwBkKWQqhABkKmUZgwNaGmUbZCt1AXLgRwBkLGQthABkLWUZgwNaHG4QRwBkLmQthABkLWUZgwNaHGkAWh1lHoMAWh9kL2QvZwJaIGSLZDBkMYQBWiFlFloiZQZkMmQzhACDAVojZANaJGUGZIxkNWQ2hAGDAVolZI1kN2Q4hAFaJmUnZANmAmQ5ZDqEAVooZDtkPIQAWillJ2YBZD1kPoQBWiplJ2QDZgJkP2RAhAFaK2RBZEKEAFosZENkRIQAWi1kRWRGhABaLmRHZEiEAFovZElkSoQAWjBkS2RMhABaMWRNZE6EAFoyZE9kUIQAWjNkUWRShABaNGRTZFSEAFo1ZFVkVoQAWjZkV2RYhABaN2RZZFqEAFo4ZI5kW2RchAFaOWRdZF6EAFo6ZF9kYIQAWjtkYWRihABaPGRjZGSEAFo9ZGVkZoQAWj5kZ2RohABaP2SPZGlkaoQBWkBka2RshABaQWRtZG6EAFpCZG9kcIQAWkNkcWRyhABaRGcAZgFkc2R0hAFaRWSQZHVkdoQBWkaHAGYBZHdkeIQIWkdkeWR6hABaSGR7ZHyEAFpJZH1kfoQAWkpkf2SAhABaS2SRZIFkgoQBWkxkkmSEZIWEAVpNhwAEAFpOUwApk3ImAAAAeilBYnN0cmFjdCBiYXNlIGxldmVsIHBhcnNlciBlbGVtZW50IGNsYXNzLnoEIAoJDUZjAQAAAAAAAAAAAAAAAQAAAAIA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IHdoZW4gc3VjY2Vzc2Z1bGx5IG1hdGNoaW5nIHBhcnNlIGVsZW1lbnQgZGVmaW5pdGlvbi4KICAgICAgICBQYXJzZSBhY3Rpb24gZm4gaXMgYSBjYWxsYWJsZSBtZXRob2Qgd2l0aCAwLTMgYXJndW1lbnRzLCBjYWxsZWQgYXMgQ3tmbihzLGxvYyx0b2tzKX0sCiAgICAgICAgQ3tmbihsb2MsdG9rcyl9LCBDe2ZuKHRva3MpfSwgb3IganVzdCBDe2ZuKCl9LCB3aGVyZToKICAgICAgICAgLSBzICAgPSB0aGUgb3JpZ2luYWwgc3RyaW5nIGJlaW5nIHBhcnNlZCAoc2VlIG5vdGUgYmVsb3cpCiAgICAgICAgIC0gbG9jID0gdGhlIGxvY2F0aW9uIG9mIHRoZSBtYXRjaGluZyBzdWJzdHJpbmcKICAgICAgICAgLSB0b2tzID0gYSBsaXN0IG9mIHRoZSBtYXRjaGVkIHRva2VucywgcGFja2FnZWQgYXMgYSBDe0x7UGFyc2VSZXN1bHRzfX0gb2JqZWN0CiAgICAgICAgSWYgdGhlIGZ1bmN0aW9ucyBpbiBmbnMgbW9kaWZ5IHRoZSB0b2tlbnMsIHRoZXkgY2FuIHJldHVybiB0aGVtIGFzIHRoZSByZXR1cm4KICAgICAgICB2YWx1ZSBmcm9tIGZuLCBhbmQgdGhlIG1vZGlmaWVkIGxpc3Qgb2YgdG9rZW5zIHdpbGwgcmVwbGFjZSB0aGUgb3JpZ2luYWwuCiAgICAgICAgT3RoZXJ3aXNlLCBmbiBkb2VzIG5vdCBuZWVkIHRvIHJldHVybiBhbnkgdmFsdWUuCgogICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzOgogICAgICAgICAtIGNhbGxEdXJpbmdUcnkgPSAoZGVmYXVsdD1De0ZhbHNlfSkgaW5kaWNhdGUgaWYgcGFyc2UgYWN0aW9uIHNob3VsZCBiZSBydW4gZHVyaW5nIGxvb2thaGVhZHMgYW5kIGFsdGVybmF0ZSB0ZXN0aW5nCgogICAgICAgIE5vdGU6IHRoZSBkZWZhdWx0IHBhcnNpbmcgYmVoYXZpb3IgaXMgdG8gZXhwYW5kIHRhYnMgaW4gdGhlIGlucHV0IHN0cmluZwogICAgICAgIGJl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a2V5d29yZCBhcmd1bWVudHM6CiAgICAgICAgIC0gbWVzc2FnZSA9IGRlZmluZSBhIGN1c3RvbSBtZXNzYWdlIHRvIGJlIHVzZWQgaW4gdGhlIHJhaXNlZCBleGNlcHRpb24KICAgICAgICAgLSBmYXRhbCAgID0gaWYgVHJ1ZSwgd2lsbCByYWlzZSBQYXJzZUZhdGFsRXhjZXB0aW9uIHRvIHN0b3AgcGFyc2luZyBpbW1lZGlhdGVseTsgb3RoZXJ3aXNlIHdpbGwgcmFpc2UgUGFyc2VFeGNlcHRpb24KICAgICAgICAgCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpLnNldFBhcnNlQWN0aW9uKGxhbWJkYSB0b2tzOiBpbnQodG9rc1swXSkpCiAgICAgICAgICAgIHllYXJfaW50ID0gaW50ZWdlci5jb3B5KCkKICAgICAgICAgICAgeWVhcl9pbnQuYWRkQ29uZGl0aW9uKGxhbWJkYSB0b2tzOiB0b2tzWzBdID49IDIwMDAsIG1lc3NhZ2U9Ik9ubHkgc3VwcG9ydCB5ZWFycyAyMDAwIGFuZCBsYXRlciIpCiAgICAgICAgICAgIGRhdGVfc3RyID0geWVhcl9pbnQgKyAnLycgKyBpbnRlZ2VyICsgJy8nICsgaW50ZWdlcgoKICAgICAgICAgICAgcmVzdWx0ID0gZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKSAgIyAtPiBFeGNlcHRpb246IE9ubHkgc3VwcG9ydCB5ZWFycyAyMDAwIGFuZCBsYXRlciAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCiAgICAgICAg2gdtZXNzYWdleh1mYWlsZWQgdXNlci1kZWZpbmVkIGNvbmRpdGlvbtoFZmF0YWxGYwMAAAAAAAAAAAAAAAMAAAAFAAAAEwAAAHMkAAAAdAB0AYgBgwF8AHwBfAKDA4MBcyCIAHwAfAGIAoMDggFkAFMAcokAAAApAnIZAQAAcpsBAAByfgEAAKkD2ghleGNfdHlwZdoCZm5ypwAAAHJ5AAAAcnoAAADaAnBhJgUAAHMEAAAAAAEUAXomUGFyc2VyRWxlbWVudC5hZGRDb25kaXRpb24uPGxvY2Fscz4ucGFytQEAACkGcvIAAAByIwAAAHIhAAAAcqIBAAByJAEAAHK1AQAAKQRyqwAAAHLNAQAAchwBAABy1AEAAHJ5AAAActEBAAByegAAANoMYWRkQ29uZGl0aW9uEgUAAHMOAAAAABEMARQBCAEQAw4BFAF6GlBhcnNlckVsZW1lbnQuYWRkQ29uZGl0aW9uYwIAAAAAAAAAAAAAAAIAAAACAAAAQwAAAHMKAAAAfAF8AF8AfABTACkBYQsCAABEZWZpbmUgYWN0aW9uIHRvIHBlcmZvcm0gaWYgcGFyc2luZyBmYWlscyBhdCB0aGlzIGV4cHJlc3Npb24uCiAgICAgICAgICAgRmFpbCBhY3RvbiBmbiBpcyBhIGNhbGxhYmxlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIGFyZ3VtZW50cwogICAgICAgICAgIEN7Zm4ocyxsb2MsZXhwcixlcnIpfSB3aGVyZToKICAgICAgICAgICAgLSBzID0gc3RyaW5nIGJlaW5nIHBhcnNlZAogICAgICAgICAgICAtIGxvYyA9IGxvY2F0aW9uIHdoZXJlIGV4cHJlc3Npb24gbWF0Y2ggd2FzIGF0dGVtcHRlZCBhbmQgZmFpbGVkCiAgICAgICAgICAgIC0gZXhwciA9IHRoZSBwYXJzZSBleHByZXNzaW9uIHRoYXQgZmFpbGVkCiAgICAgICAgICAgIC0gZXJyID0gdGhlIGV4Y2VwdGlvbiB0aHJvd24KICAgICAgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBubyB2YWx1ZS4gIEl0IG1heSB0aHJvdyBDe0x7UGFyc2VGYXRhbEV4Y2VwdGlvbn19CiAgICAgICAgICAgaWYgaXQgaXMgZGVzaXJlZCB0byBzdG9wIHBhcnNpbmcgaW1tZWRpYXRlbHkuKQFyowEAACkCcqsAAABy0wEAAHJ5AAAAcnkAAAByegAAANoNc2V0RmFpbEFjdGlvbi0FAABzBAAAAAAKBgF6G1BhcnNlckVsZW1lbnQuc2V0RmFpbEFjdGlvbmMDAAAAAAAAAAAAAAAGAAAACQAAAEMAAABzTAAAAGQBfQN8A3JIZAJ9A3wAagBEAF0yfQR6GnwEoAF8AXwCoQJcAn0CfQVkAX0DcRhXAHESBAB0AnlCAQABAAEAWQBxEjAAcRJxBHwCUwCpA05URikDcqwBAAByyAEAAHIhAAAAKQZyqwAAAHJ1AQAAcqYAAADaCmV4cHJzRm91bmTaAWXaBWR1bW15cnkAAAByeQAAAHJ6AAAA2g9fc2tpcElnbm9yYWJsZXM6BQAAcxQAAAAAAQQBBAEEAQoBAgIQAQoBDAEKAXodUGFyc2VyRWxlbWVudC5fc2tpcElnbm9yYWJsZXNjAwAAAAAAAAAAAAAABQAAAAQAAABDAAAAc0gAAAB8AGoAchJ8AKABfAF8AqECfQJ8AGoCckR8AGoDfQN0BHwBgwF9BHwCfARrAHJEfAF8AhkAfAN2AHJEfAJkATcAfQJxJnwCUwCpAk5yjQAAACkFcqwBAABy2wEAAHKnAQAAcqgBAABy+AAAACkFcqsAAABydQEAAHKmAAAA2gJ3dNoIaW5zdHJsZW5yeQAAAHJ5AAAAcnoAAADaCHByZVBhcnNlRwUAAHMQAAAAAAEGAQwCBgEGAQgBFAEKAnoWUGFyc2VyRWxlbWVudC5wcmVQYXJzZWMEAAAAAAAAAAAAAAAEAAAAAgAAAEMAAABzCAAAAHwCZwBmAlMAcokAAAByeQAAAKkEcqsAAABydQEAAHKmAAAAcsIBAAByeQAAAHJ5AAAAcnoAAADaCXBhcnNlSW1wbFMFAABzAgAAAAABehdQYXJzZXJFbGVtZW50LnBhcnNlSW1wbGMEAAAAAAAAAAAAAAAEAAAAAQAAAEMAAABzBAAAAHwDUwByiQAAAHJ5AAAAqQRyqwAAAHJ1AQAAcqYAAADaCXRva2VubGlzdHJ5AAAAcnkAAAByegAAANoJcG9zdFBhcnNlVgUAAHMCAAAAAAF6F1BhcnNlckVsZW1lbnQucG9zdFBhcnNlYwUAAAAAAAAAAAAAAAwAAAAKAAAAQwAAAHPOAgAAfABqAH0FfAVzEHwAagFy7HwAagJkARkAcix8AGoCZAEZAHwBfAJ8AIMDAQB8BHJEfABqA3JEfACgBHwBfAKhAn0GbgR8An0GfAZ9B3pCehZ8AKAFfAF8BnwDoQNcAn0CfQhXAG4mBAB0BnmKAQABAAEAdAd8AXQIfAGDAXwAagl8AIMEggFZAG4CMABXAG5aBAB0CnnoAQB9CQEAekJ8AGoCZAIZAHK8fABqAmQCGQB8AXwHfAB8CYMEAQB8AGoBctJ8AKABfAF8B3wAfAmhBAEAggBXAFkAZAB9CX4JbgpkAH0JfgkwADAAbo58BJABcgh8AGoDkAFyCHwAoAR8AXwCoQJ9Bm4EfAJ9BnwGfQd8AGoLkAFzJnwGdAh8AYMBawWQAXJoehZ8AKAFfAF8BnwDoQNcAn0CfQhXAG4oBAB0BpABeWQBAAEAAQB0B3wBdAh8AYMBfABqCXwAgwSCAVkAbgIwAG4SfACgBXwBfAZ8A6EDXAJ9An0IfACgDHwBfAJ8CKEDfQh0DXwIfABqDnwAag98AGoQZAONBH0KfABqEZACcp58A5ABc7R8AGoSkAJynnwFkAJyVHpOfABqEUQAXUJ9C3wLfAF8B3wKgwN9CHwIZAB1AZABcsJ0DXwIfABqDnwAag+QAW/4dBN8CHQNdBRmAoMCfABqEGQDjQR9CpABccJXAG5IBAB0CpACeVABAH0JAQB6LnwAagJkAhkAkAJyOnwAagJkAhkAfAF8B3wAfAmDBAEAggBXAFkAZAB9CX4JbgpkAH0JfgkwADAAbkp8AGoRRABdQn0LfAt8AXwHfAqDA30IfAhkAHUBkAJyWnQNfAh8AGoOfABqD5ACb5B0E3wIdA10FGYCgwJ8AGoQZAONBH0KkAJxWnwFkAJyxnwAagJkBBkAkAJyxnwAagJkBBkAfAF8B3wCfAB8CoMFAQB8AnwKZgJTACkFTnIBAAAAcnMAAAApAnLbAAAActwAAAByjQAAACkVcq0BAAByowEAAHKyAQAAcrQBAABy3wEAAHLhAQAAcuwAAAByIQAAAHL4AAAAcrABAAByHwAAAHKvAQAAcuQBAAByJAAAAHKlAQAAcqYBAABysQEAAHKiAQAAcrUBAAByfQAAAHLjAAAAKQxyqwAAAHJ1AQAAcqYAAABywgEAAHLDAQAA2glkZWJ1Z2dpbmfaBnByZWxvY9oLdG9rZW5zU3RhcnTaBnRva2Vuc9oDZXJy2glyZXRUb2tlbnNy0wEAAHJ5AAAAcnkAAAByegAAANoNX3BhcnNlTm9DYWNoZVoFAABzdAAAAAABBgIKAgoBEgEKAQ4CBAEEAQIBAgEWAQwBHgEOAgoBFAEGARABGgIOAQ4CBAEEARYBAgEWAQ4BHAISAg4CFgEWAQYBAgEKAQwBCgEEAQQBFAEE/Q4EEAIMARQBGgIKAQwBCgEEAQQBFAEE/QoEBgIMARYCehtQYXJzZXJFbGVtZW50Ll9wYXJzZU5vQ2FjaGVjAwAAAAAAAAAAAAAAAwAAAAgAAABDAAAAcz4AAAB6FnwAagB8AXwCZAFkAo0DZAMZAFcAUwAEAHQBeTgBAAEAAQB0AnwBfAJ8AGoDfACDBIIBWQBuAjAAZABTACkETkYpAXLCAQAAcgEAAAApBHLIAQAAciMAAAByIQAAAHKwAQAAqQNyqwAAAHJ1AQAAcqYAAAByeQAAAHJ5AAAAcnoAAADaCHRyeVBhcnNloQUAAHMIAAAAAAECARYBDAF6FlBhcnNlckVsZW1lbnQudHJ5UGFyc2VjAwAAAAAAAAAAAAAAAwAAAAkAAABDAAAAczIAAAB6EHwAoAB8AXwCoQIBAFcAbhgEAHQBdAJmAnkoAQABAAEAWQBkAVMAMABkAlMAZABTACkDTkZUKQNy7QEAAHIhAAAAcuwAAABy7AEAAHJ5AAAAcnkAAAByegAAANoMY2FuUGFyc2VOZXh0pwUAAHMKAAAAAAECARABEAEIAnoaUGFyc2VyRWxlbWVudC5jYW5QYXJzZU5leHRjAAAAAAAAAAAAAAAAAAAAAAIAAABAAAAAcxQAAABlAFoBZABaAmQBZAKEAFoDZANTACkEeh1QYXJzZXJFbGVtZW50Ll9VbmJvdW5kZWRDYWNoZWMBAAAAAAAAAAAAAAAFAAAABAAAAAMAAABzfgAAAGkAiQB0AIMABAB8AF8BiQGHAIcBZgJkAWQChAh9AYcAZgFkA2QEhAh9AocAZgFkBWQGhAh9A4cAZgFkB2QIhAh9BHQCoAN8AXwAoQJ8AF8EdAKgA3wCfAChAnwAXwV0AqADfAN8AKECfABfBnQCoAN8BHwAoQJ8AF8HZABTACkJTmMCAAAAAAAAAAAAAAACAAAABAAAABMAAABzDAAAAIgAoAB8AYgBoQJTAHKJAAAAqQFy8gAAAKkCcqsAAAByIAEAAKkC2gVjYWNoZdoMbm90X2luX2NhY2hlcnkAAAByegAAAHLyAAAAtAUAAHMCAAAAAAF6M1BhcnNlckVsZW1lbnQuX1VuYm91bmRlZENhY2hlLl9faW5pdF9fLjxsb2NhbHM+LmdldGMDAAAAAAAAAAAAAAADAAAAAwAAABMAAABzDAAAAHwCiAB8ATwAZABTAHKJAAAAcnkAAACpA3KrAAAAciABAAByAgEAAKkBcvIBAAByeQAAAHJ6AAAA2gNzZXS3BQAAcwIAAAAAAXozUGFyc2VyRWxlbWVudC5fVW5ib3VuZGVkQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uc2V0YwEAAAAAAAAAAAAAAAEAAAACAAAAEwAAAHMMAAAAiACgAKEAAQBkAFMAcokAAACpAXIoAQAAcrUAAABy9QEAAHJ5AAAAcnoAAAByKAEAALoFAABzAgAAAAABejVQYXJzZXJFbGVtZW50Ll9VbmJvdW5kZWRDYWNoZS5fX2luaXRfXy48bG9jYWxzPi5jbGVhcmMBAAAAAAAAAAAAAAABAAAAAgAAABMAAABzCAAAAHQAiACDAVMAcokAAACpAXL4AAAAcrUAAABy9QEAAHJ5AAAAcnoAAADaCWNhY2hlX2xlbr0FAABzAgAAAAABejlQYXJzZXJFbGVtZW50Ll9VbmJvdW5kZWRDYWNoZS5fX2luaXRfXy48bG9jYWxzPi5jYWNoZV9sZW4pCHLWAAAAcvMBAADaBXR5cGVz2gpNZXRob2RUeXBlcvIAAABy9gEAAHIoAQAAcgYBAAApBXKrAAAAcvIAAABy9gEAAHIoAQAAcvkBAAByeQAAAHLxAQAAcnoAAAByrQAAALAFAABzFAAAAAABBAEMAg4DDAMMAwwDDgEOAQ4BeiZQYXJzZXJFbGVtZW50Ll9VbmJvdW5kZWRDYWNoZS5fX2luaXRfX06pBHKbAAAAcpwAAABynQAAAHKtAAAAcnkAAAByeQAAAHJ5AAAAcnoAAADaD19VbmJvdW5kZWRDYWNoZa8FAABzAgAAAAgBcv0BAABOYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHMUAAAAZQBaAWQAWgJkAWQChABaA2QDUwApBPoYUGFyc2VyRWxlbWVudC5fRmlmb0NhY2hlYwIAAAAAAAAAAAAAAAYAAAAEAAAAAwAAAHOCAAAAdACDAAQAfABfAYkBdAKDAIkAhwCHAWYCZAFkAoQIfQKHAIcCZgJkA2QEhAh9A4cAZgFkBWQGhAh9BIcAZgFkB2QIhAh9BXQDoAR8AnwAoQJ8AF8FdAOgBHwDfAChAnwAXwZ0A6AEfAR8AKECfABfB3QDoAR8BXwAoQJ8AF8IZABTACkJTmMCAAAAAAAAAAAAAAACAAAABAAAABMAAABzDAAAAIgAoAB8AYgBoQJTAHKJAAAAcu8BAABy8AEAAHLxAQAAcnkAAAByegAAAHLyAAAAzAUAAHMCAAAAAAH6LlBhcnNlckVsZW1lbnQuX0ZpZm9DYWNoZS5fX2luaXRfXy48bG9jYWxzPi5nZXRjAwAAAAAAAAAAAAAAAwAAAAgAAAATAAAAczwAAAB8AogAfAE8AHQAiACDAYgBawRyOHoOiACgAWQBoQEBAFcAcQgEAHQCeTQBAAEAAQBZAHEIMABxCGQAUwCpAk5GKQNy+AAAANoHcG9waXRlbXLqAAAAcvQBAAApAnLyAQAA2gRzaXplcnkAAAByegAAAHL2AQAAzwUAAHMMAAAAAAEIAQwBAgEOAQwB+i5QYXJzZXJFbGVtZW50Ll9GaWZvQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uc2V0YwEAAAAAAAAAAAAAAAEAAAACAAAAEwAAAHMMAAAAiACgAKEAAQBkAFMAcokAAABy9wEAAHK1AAAAcvUBAAByeQAAAHJ6AAAAcigBAADXBQAAcwIAAAAAAfowUGFyc2VyRWxlbWVudC5fRmlmb0NhY2hlLl9faW5pdF9fLjxsb2NhbHM+LmNsZWFyYwEAAAAAAAAAAAAAAAEAAAACAAAAEwAAAHMIAAAAdACIAIMBUwByiQAAAHL4AQAAcrUAAABy9QEAAHJ5AAAAcnoAAABy+QEAANoFAABzAgAAAAAB+jRQYXJzZXJFbGVtZW50Ll9GaWZvQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uY2FjaGVfbGVuKQly1gAAAHLzAQAA2gxfT3JkZXJlZERpY3Ry+gEAAHL7AQAAcvIAAABy9gEAAHIoAQAAcgYBAACpBnKrAAAAcgICAABy8gAAAHL2AQAAcigBAABy+QEAAHJ5AAAAKQNy8gEAAHLzAQAAcgICAAByegAAAHKtAAAAxwUAAHMUAAAAAAEMAgYCDgMOCAwDDAMOAQ4BDgH6IVBhcnNlckVsZW1lbnQuX0ZpZm9DYWNoZS5fX2luaXRfX05y/AEAAHJ5AAAAcnkAAAByeQAAAHJ6AAAA2gpfRmlmb0NhY2hlxgUAAHMCAAAACAFyCQIAAGMAAAAAAAAAAAAAAAAAAAAAAgAAAEAAAABzFAAAAGUAWgFkAFoCZAFkAoQAWgNkA1MAKQRy/gEAAGMCAAAAAAAAAAAAAAAGAAAABAAAAAMAAABzkAAAAHQAgwAEAHwAXwGJAmkAiQB0AqADZwCIA6ECiQGHAIcCZgJkAWQChAh9AocAhwGHA2YDZANkBIQIfQOHAIcBZgJkBWQGhAh9BIcAZgFkB2QIhAh9BXQEoAV8AnwAoQJ8AF8GdASgBXwDfAChAnwAXwd0BKAFfAR8AKECfABfCHQEoAV8BXwAoQJ8AF8JZABTACkJTmMCAAAAAAAAAAAAAAACAAAABAAAABMAAABzDAAAAIgAoAB8AYgBoQJTAHKJAAAAcu8BAABy8AEAAHLxAQAAcnkAAAByegAAAHLyAAAA6gUAAHMCAAAAAAFy/wEAAGMDAAAAAAAAAAAAAAADAAAABAAAABMAAABzNAAAAHwCiAB8ATwAdACIAYMBiAJrBHImiACgAYgBoAKhAGQAoQIBAHEIiAGgA3wBoQEBAGQAUwByiQAAACkEcvgAAAByHwEAANoHcG9wbGVmdHIkAQAAcvQBAAApA3LyAQAA2ghrZXlfZmlmb3ICAgAAcnkAAAByegAAAHL2AQAA7QUAAHMIAAAAAAEIAQwBEgFyAwIAAGMBAAAAAAAAAAAAAAABAAAAAgAAABMAAABzFAAAAIgAoAChAAEAiAGgAKEAAQBkAFMAcokAAABy9wEAAHK1AAAAKQJy8gEAAHILAgAAcnkAAAByegAAAHIoAQAA8wUAAHMEAAAAAAEIAXIEAgAAYwEAAAAAAAAAAAAAAAEAAAACAAAAEwAAAHMIAAAAdACIAIMBUwByiQAAAHL4AQAAcrUAAABy9QEAAHJ5AAAAcnoAAABy+QEAAPcFAABzAgAAAAABcgUCAAApCnLWAAAAcvMBAADaC2NvbGxlY3Rpb25z2gVkZXF1ZXL6AQAAcvsBAABy8gAAAHL2AQAAcigBAAByBgEAAHIHAgAAcnkAAAApBHLyAQAAcgsCAABy8wEAAHICAgAAcnoAAAByrQAAAOQFAABzFgAAAAABDAIEAQwCDgMQBg4EDAMOAQ4BDgFyCAIAAE5y/AEAAHJ5AAAAcnkAAAByeQAAAHJ6AAAAcgkCAADjBQAAcwIAAAAIAXIBAAAAYwUAAAAAAAAAAAAAAAsAAAALAAAAQwAAAHMwAQAAZAFcAn0FfQZ8AHwBfAJ8BHwDZgV9B3QAagGP/gEAdABqAn0IfAigA3wHoQF9CXwJfAhqBHUAcsp0AGoFfAYFABkAZAI3AAMAPAB6FHwAoAZ8AXwCfAN8BKEEfQlXAG46BAB0B3mYAQB9CgEAeiJ8CKAIfAd8CmoJfApqCo4AoQIBAIIAVwBZAGQAfQp+Cm44ZAB9Cn4KMAAwAHwIoAh8B3wJZAMZAHwJZAIZAKALoQBmAqECAQB8CVcAAgBkAAQABACDAwEAUwBuQnQAagV8BQUAGQBkAjcAAwA8AHQMfAl0DYMCcup8CYIBfAlkAxkAfAlkAhkAoAuhAGYCVwACAGQABAAEAIMDAQBTAFcAZAAEAAQAgwMBAG4SMQCQAXMiMAABAAEAAQBZAAEAZABTACkETnIvAQAAco0AAAByAQAAACkOciYAAADaEnBhY2tyYXRfY2FjaGVfbG9ja9oNcGFja3JhdF9jYWNoZXLyAAAAcvMBAADaE3BhY2tyYXRfY2FjaGVfc3RhdHNy6wEAAHIfAAAAcvYBAABylAEAAHKqAAAAcukAAAByfQAAAHKXAQAAKQtyqwAAAHJ1AQAAcqYAAABywgEAAHLDAQAA2gNISVTaBE1JU1PaBmxvb2t1cHLyAQAAcgIBAAByrwAAAHJ5AAAAcnkAAAByegAAANoLX3BhcnNlQ2FjaGUGBgAAcyQAAAAAAQgBDgEIAQYBCgEKARIBAgEUAQ4CFAEYAhwBFAISAQoBBAF6GVBhcnNlckVsZW1lbnQuX3BhcnNlQ2FjaGVjAAAAAAAAAAAAAAAAAAAAAAQAAABDAAAAcygAAAB0AGoBoAKhAAEAZAFnAXQDdABqBIMBFAB0AGoEZABkAIUCPABkAFMActIAAAApBXImAAAAcg8CAAByKAEAAHL4AAAAchACAAByeQAAAHJ5AAAAcnkAAAByegAAANoKcmVzZXRDYWNoZR8GAABzBAAAAAACCgF6GFBhcnNlckVsZW1lbnQucmVzZXRDYWNoZemAAAAAYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHM4AAAAdABqAXM0ZAF0AF8BfABkAnUAciB0AKACoQB0AF8Dbgx0AKAEfAChAXQAXwN0AGoFdABfBmQCUwApA2GWBQAARW5hYmxlcyAicGFja3JhdCIgcGFyc2luZywgd2hpY2ggYWRkcyBtZW1vaXppbmcgdG8gdGhlIHBhcnNpbmcgbG9naWMuCiAgICAgICAgICAgUmVwZWF0ZWQgcGFyc2UgYXR0ZW1wdHMgYXQgdGhlIHNhbWUgc3RyaW5nIGxvY2F0aW9uICh3aGljaCBoYXBwZW5zCiAgICAgICAgICAgb2Z0ZW4gaW4gbWFueSBjb21wbGV4IGdyYW1tYXJzKSBjYW4gaW1tZWRpYXRlbHkgcmV0dXJuIGEgY2FjaGVkIHZhbHVlLAogICAgICAgICAgIGluc3RlYWQgb2YgcmUtZXhlY3V0aW5nIHBhcnNpbmcvdmFsaWRhdGluZyBjb2RlLiAgTWVtb2l6aW5nIGlzIGRvbmUgb2YKICAgICAgICAgICBib3RoIHZhbGlkIHJlc3VsdHMgYW5kIHBhcnNpbmcgZXhjZXB0aW9ucy4KICAgICAgICAgICAKICAgICAgICAgICBQYXJhbWV0ZXJzOgogICAgICAgICAgICAtIGNhY2hlX3NpemVfbGltaXQgLSAoZGVmYXVsdD1DezEyOH0pIC0gaWYgYW4gaW50ZWdlciB2YWx1ZSBpcyBwcm92aWRlZAogICAgICAgICAgICAgIHdpbGwgbGltaXQgdGhlIHNpemUgb2YgdGhlIHBhY2tyYXQgY2FjaGU7IGlmIE5vbmUgaXMgcGFzc2VkLCB0aGVuCiAgICAgICAgICAgICAgdGhlIGNhY2hlIHNpemUgd2lsbCBiZSB1bmJvdW5kZWQ7IGlmIDAgaXMgcGFzc2VkLCB0aGUgY2FjaGUgd2lsbAogICAgICAgICAgICAgIGJlIGVmZmVjdGl2ZWx5IGRpc2FibGVkLgogICAgICAgICAgICAKICAgICAgICAgICBUaGlzIHNwZWVkdXAgbWF5IGJyZWFrIGV4aXN0aW5nIHByb2dyYW1zIHRoYXQgdXNlIHBhcnNlIGFjdGlvbnMgdGhhdAogICAgICAgICAgIGhhdmUgc2lkZS1lZmZlY3RzLiAgRm9yIHRoaXMgcmVhc29uLCBwYWNrcmF0IHBhcnNpbmcgaXMgZGlzYWJsZWQgd2hlbgogICAgICAgICAgIHlvdSBmaXJzdCBpbXBvcnQgcHlwYXJzaW5nLiAgVG8gYWN0aXZhdGUgdGhlIHBhY2tyYXQgZmVhdHVyZSwgeW91cgogICAgICAgICAgIHByb2dyYW0gbXVzdCBjYWxsIHRoZSBjbGFzcyBtZXRob2QgQ3tQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXQoKX0uICBJZgogICAgICAgICAgIHlvdXIgcHJvZ3JhbSB1c2VzIEN7cHN5Y299IHRvICJjb21waWxlIGFzIHlvdSBnbyIsIHlvdSBtdXN0IGNhbGwKICAgICAgICAgICBDe2VuYWJsZVBhY2tyYXR9IGJlZm9yZSBjYWxsaW5nIEN7cHN5Y28uZnVsbCgpfS4gIElmIHlvdSBkbyBub3QgZG8gdGhpcywKICAgICAgICAgICBQeXRob24gd2lsbCBjcmFzaC4gIEZvciBiZXN0IHJlc3VsdHMsIGNhbGwgQ3tlbmFibGVQYWNrcmF0KCl9IGltbWVkaWF0ZWx5CiAgICAgICAgICAgYWZ0ZXIgaW1wb3J0aW5nIHB5cGFyc2luZy4KICAgICAgICAgICAKICAgICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgICAgaW1wb3J0IHB5cGFyc2luZwogICAgICAgICAgICAgICBweXBhcnNpbmcuUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0KCkKICAgICAgICBUTikHciYAAADaD19wYWNrcmF0RW5hYmxlZHL9AQAAcg8CAAByCQIAAHIUAgAAcsgBAAApAdoQY2FjaGVfc2l6ZV9saW1pdHJ5AAAAcnkAAAByegAAANoNZW5hYmxlUGFja3JhdCUGAABzDAAAAAAbBgEGAQgBDAIMAXobUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0YwMAAAAAAAAAAAAAAAgAAAAKAAAAQwAAAHOwAAAAdACgAaEAAQB8AGoCcxZ8AKADoQABAHwAagREAF0MfQN8A6ADoQABAHEcfABqBXM4fAGgBqEAfQF6PHwAoAd8AWQBoQJcAn0EfQV8AnJyfACgCHwBfAShAn0EdAmDAHQKgwAXAH0GfAagB3wBfAShAgEAVwBuMgQAdAt5pgEAfQcBAHoadABqDHKOggBuBHwHggFXAFkAZAJ9B34Hbg5kAn0HfgcwADAAfAVTAGQCUwApA2FDBQAACiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuCiAgICAgICAgVGhpcyBpcyB0aGUgbWFpbiBpbnRlcmZhY2UgdG8gdGhlIGNsaWVudCBjb2RlLCBvbmNlIHRoZSBjb21wbGV0ZQogICAgICAgIGV4cHJlc3Npb24gaGFzIGJlZW4gYnVpbHQuCgogICAgICAgIElmIHlvdSB3YW50IHRoZSBncmFtbWFyIHRvIHJlcXVpcmUgdGhhdCB0aGUgZW50aXJlIGlucHV0IHN0cmluZyBiZQogICAgICAgIHN1Y2Nlc3NmdWxseSBwYXJzZWQsIHRoZW4gc2V0IEN7cGFyc2VBbGx9IHRvIFRydWUgKGVxdWl2YWxlbnQgdG8gZW5kaW5nCiAgICAgICAgdGhlIGdyYW1tYXIgd2l0aCBDe0x7U3RyaW5nRW5kKCl9fSkuCgogICAgICAgIE5vdGU6IEN7cGFyc2VTdHJpbmd9IGltcGxpY2l0bHkgY2FsbHMgQ3tleHBhbmR0YWJzKCl9IG9uIHRoZSBpbnB1dCBzdHJpbmcsCiAgICAgICAgaW4gb3JkZXIgdG8gcmVwb3J0IHByb3BlciBjb2x1bW4gbnVtYmVycyBpbiBwYXJzZSBhY3Rpb25zLgogICAgICAgIElmIHRoZSBpbnB1dCBzdHJpbmcgY29udGFpbnMgdGFicyBhbmQKICAgICAgICB0aGUgZ3JhbW1hciB1c2VzIHBhcnNlIGFjdGlvbnMgdGhhdCB1c2UgdGhlIEN7bG9jfSBhcmd1bWVudCB0byBpbmRleCBpbnRvIHRoZQogICAgICAgIHN0cmluZyBiZWluZyBwYXJzZWQsIHlvdSBjYW4gZW5zdXJlIHlvdSBoYXZlIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBpbnB1dAogICAgICAgIHN0cmluZyBieToKICAgICAgICAgLSBjYWxsaW5nIEN7cGFyc2VXaXRoVGFic30gb24geW91ciBncmFtbWFyIGJlZm9yZSBjYWxsaW5nIEN7cGFyc2VTdHJpbmd9CiAgICAgICAgICAgKHNlZSBMe0l7cGFyc2VXaXRoVGFic308cGFyc2VXaXRoVGFicz59KQogICAgICAgICAtIGRlZmluZSB5b3VyIHBhcnNlIGFjdGlvbiB1c2luZyB0aGUgZnVsbCBDeyhzLGxvYyx0b2tzKX0gc2lnbmF0dXJlLCBhbmQKICAgICAgICAgICByZWZlcmVuY2UgdGhlIGlucHV0IHN0cmluZyB1c2luZyB0aGUgcGFyc2UgYWN0aW9uJ3MgQ3tzfSBhcmd1bWVudAogICAgICAgICAtIGV4cGxpY2l0bHkgZXhwYW5kIHRoZSB0YWJzIGluIHlvdXIgaW5wdXQgc3RyaW5nIGJlZm9yZSBjYWxsaW5nCiAgICAgICAgICAgQ3twYXJzZVN0cmluZ30KICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgV29yZCgnYScpLnBhcnNlU3RyaW5nKCdhYWFhYWJhYWEnKSAgIyAtPiBbJ2FhYWFhJ10KICAgICAgICAgICAgV29yZCgnYScpLnBhcnNlU3RyaW5nKCdhYWFhYWJhYWEnLCBwYXJzZUFsbD1UcnVlKSAgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkIGVuZCBvZiB0ZXh0CiAgICAgICAgcgEAAABOKQ1yJgAAAHIVAgAAcq4BAADaCnN0cmVhbWxpbmVyrAEAAHKrAQAA2gpleHBhbmR0YWJzcsgBAABy3wEAAHIPAAAAcisAAAByHwAAANoSdmVyYm9zZV9zdGFja3RyYWNlKQhyqwAAAHJ1AQAA2ghwYXJzZUFsbHLZAQAAcqYAAABy6AEAANoCc2VyfAEAAHJ5AAAAcnkAAAByegAAANoLcGFyc2VTdHJpbmdIBgAAcyQAAAAAGwgBBgEIAgoBCgEGAQgBAgEQAQQBDAEMARABDgEGAQQDGgJ6GVBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmdjBAAAAAAAAAAAAAAADwAAAAoAAABjAAAAczYBAAB8AGoAcw58AKABoQABAHwAagJEAF0MfQR8BKABoQABAHEUfABqA3M0dAR8AYMBoAWhAH0BdAZ8AYMBfQVkAX0GfABqB30HfABqCH0IdAmgCqEAAQBkAX0JeqJ8BnwFawFy+HwJfAJrAHL4eiB8B3wBfAaDAn0KfAh8AXwKZAJkA40DXAJ9C30MVwBuGgQAdAt5pAEAAQABAHwKZAQXAH0GWQBxWjAAfAt8BmsEcu58CWQENwB9CXwMfAp8C2YDVgABAHwDcuh8B3wBfAaDAn0NfA18BmsEct58C30Gcex8BmQENwB9BnH2fAt9BnFafApkBBcAfQZxWlcAbjYEAHQMkAF5MAEAfQ4BAHocdAlqDZABchiCAG4EfA6CAVcAWQBkBX0Ofg5uCmQFfQ5+DjAAMABkBVMAKQZhhgQAAAogICAgICAgIFNjYW4gdGhlIGlucHV0IHN0cmluZyBmb3IgZXhwcmVzc2lvbiBtYXRjaGVzLiAgRWFjaCBtYXRjaCB3aWxsIHJldHVybiB0aGUKICAgICAgICBtYXRjaGluZyB0b2tlbnMsIHN0YXJ0IGxvY2F0aW9uLCBhbmQgZW5kIGxvY2F0aW9uLiAgTWF5IGJlIGNhbGxlZCB3aXRoIG9wdGlvbmFsCiAgICAgICAgQ3ttYXhNYXRjaGVzfSBhcmd1bWVudCwgdG8gY2xpcCBzY2FubmluZyBhZnRlciAnbicgbWF0Y2hlcyBhcmUgZm91bmQuICBJZgogICAgICAgIEN7b3ZlcmxhcH0gaXMgc3BlY2lmaWVkLCB0aGVuIG92ZXJsYXBwaW5nIG1hdGNoZXMgd2lsbCBiZSByZXBvcnRlZC4KCiAgICAgICAgTm90ZSB0aGF0IHRoZSBzdGFydCBhbmQgZW5kIGxvY2F0aW9ucyBhcmUgcmVwb3J0ZWQgcmVsYXRpdmUgdG8gdGhlIHN0cmluZwogICAgICAgIGJlaW5nIHBhcnNlZC4gIFNlZSBMe0l7cGFyc2VTdHJpbmd9PHBhcnNlU3RyaW5nPn0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFyc2luZwogICAgICAgIHN0cmluZ3Mgd2l0aCBlbWJlZGRlZCB0YWJzLgoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgc291cmNlID0gInNsZGpmMTIzbHNkamprZjM0NXNsZGtqZjg3OWxranNmZDk4NyIKICAgICAgICAgICAgcHJpbnQoc291cmNlKQogICAgICAgICAgICBmb3IgdG9rZW5zLHN0YXJ0LGVuZCBpbiBXb3JkKGFscGhhcykuc2NhblN0cmluZyhzb3VyY2UpOgogICAgICAgICAgICAgICAgcHJpbnQoJyAnKnN0YXJ0ICsgJ14nKihlbmQtc3RhcnQpKQogICAgICAgICAgICAgICAgcHJpbnQoJyAnKnN0YXJ0ICsgdG9rZW5zWzBdKQogICAgICAgIAogICAgICAgIHByaW50czo6CiAgICAgICAgCiAgICAgICAgICAgIHNsZGpmMTIzbHNkamprZjM0NXNsZGtqZjg3OWxranNmZDk4NwogICAgICAgICAgICBeXl5eXgogICAgICAgICAgICBzbGRqZgogICAgICAgICAgICAgICAgICAgIF5eXl5eXl4KICAgICAgICAgICAgICAgICAgICBsc2RqamtmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGRramYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxranNmZAogICAgICAgIHIBAAAARqkBcsMBAAByjQAAAE4pDnKuAQAAchoCAAByrAEAAHKrAQAAcogAAAByGwIAAHL4AAAAct8BAAByyAEAAHImAAAAchUCAAByIQAAAHIfAAAAchwCAAApD3KrAAAAcnUBAADaCm1heE1hdGNoZXPaB292ZXJsYXBy2QEAAHLeAQAAcqYAAADaCnByZXBhcnNlRm7aB3BhcnNlRm7aB21hdGNoZXNy5gEAANoHbmV4dExvY3LoAQAA2gduZXh0bG9jcnwBAAByeQAAAHJ5AAAAcnoAAADaCnNjYW5TdHJpbmd6BgAAc0IAAAAAHgYBCAEKAQoCBgEMAQgBBAEGAQYBCAEEAQIBEAECAQoBFgEMAQ4CCAEIAQwBBAEKAQgBBgIKAgYCDgEQAQgBBAN6GFBhcnNlckVsZW1lbnQuc2NhblN0cmluZ2MCAAAAAAAAAAAAAAAIAAAACgAAAEMAAABz4gAAAGcAfQJkAX0DZAJ8AF8Aepx8AKABfAGhAUQAXVpcA30EfQV9BnwCoAJ8AXwDfAWFAhkAoQEBAHwEcnB0A3wEdASDAnJSfAJ8BKAFoQA3AH0Cbh50A3wEdAaDAnJmfAJ8BDcAfQJuCnwCoAJ8BKEBAQB8Bn0DcRp8AqACfAF8A2QDhQIZAKEBAQBkBGQFhAB8AkQAgwF9AmQGoAd0CHQJdAp8AoMBgwKhAVcAUwAEAHQLedwBAH0HAQB6GnQMag1yxIIAbgR8B4IBVwBZAGQDfQd+B24KZAN9B34HMAAwAGQDUwApB2FmAwAACiAgICAgICAgRXh0ZW5zaW9uIHRvIEN7THtzY2FuU3RyaW5nfX0sIHRvIG1vZGlmeSBtYXRjaGluZyB0ZXh0IHdpdGggbW9kaWZpZWQgdG9rZW5zIHRoYXQgbWF5CiAgICAgICAgYmUgcmV0dXJuZWQgZnJvbSBhIHBhcnNlIGFjdGlvbi4gIFRvIHVzZSBDe3RyYW5zZm9ybVN0cmluZ30sIGRlZmluZSBhIGdyYW1tYXIgYW5kCiAgICAgICAgYXR0YWNoIGEgcGFyc2UgYWN0aW9uIHRvIGl0IHRoYXQgbW9kaWZpZXMgdGhlIHJldHVybmVkIHRva2VuIGxpc3QuCiAgICAgICAgSW52b2tpbmcgQ3t0cmFuc2Zvcm1TdHJpbmcoKX0gb24gYSB0YXJnZXQgc3RyaW5nIHdpbGwgdGhlbiBzY2FuIGZvciBtYXRjaGVzLAogICAgICAgIGFuZCByZXBsYWNlIHRoZSBtYXRjaGVkIHRleHQgcGF0dGVybnMgYWNjb3JkaW5nIHRvIHRoZSBsb2dpYyBpbiB0aGUgcGFyc2UKICAgICAgICBhY3Rpb24uICBDe3RyYW5zZm9ybVN0cmluZygpfSByZXR1cm5zIHRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgc3RyaW5nLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKQogICAgICAgICAgICB3ZC5zZXRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogdG9rc1swXS50aXRsZSgpKQogICAgICAgICAgICAKICAgICAgICAgICAgcHJpbnQod2QudHJhbnNmb3JtU3RyaW5nKCJub3cgaXMgdGhlIHdpbnRlciBvZiBvdXIgZGlzY29udGVudCBtYWRlIGdsb3Jpb3VzIHN1bW1lciBieSB0aGlzIHN1biBvZiB5b3JrLiIpKQogICAgICAgIFByaW50czo6CiAgICAgICAgICAgIE5vdyBJcyBUaGUgV2ludGVyIE9mIE91ciBEaXNjb250ZW50IE1hZGUgR2xvcmlvdXMgU3VtbWVyIEJ5IFRoaXMgU3VuIE9mIFlvcmsuCiAgICAgICAgcgEAAABUTmMBAAAAAAAA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Q3tleHByKigxLE5vbmUpfSBpcyBlcXVpdmFsZW50IHRvIEN7THtPbmVPck1vcmV9KGV4cHIpfQoKICAgICAgICBOb3RlIHRoYXQgQ3tleHByKihOb25lLG4pfSBkb2VzIG5vdCByYWlzZSBhbiBleGNlcHRpb24gaWYKICAgICAgICBtb3JlIHRoYW4gbiBleHBycyBleGlzdCBpbiB0aGUgaW5wdXQgc3RyZWFtOyB0aGF0IGlzLAogICAgICAgIEN7ZXhwciooTm9uZSxuKX0gZG9lcyBub3QgZW5mb3JjZSBhIG1heGltdW0gbnVtYmVyIG9mIGV4cHIKICAgICAgICBvY2N1cnJlbmNlcy4gIElmIHRoaXMgYmVoYXZpb3IgaXMgZGVzaXJlZCwgdGhlbiB3cml0ZQogICAgICAgIEN7ZXhwciooTm9uZSxuKSArIH5leHByfQogICAgICAgIHIBAAAAKQJOTk5ycwAAAHKNAAAAejdjYW5ub3QgbXVsdGlwbHkgJ1BhcnNlckVsZW1lbnQnIGFuZCAoJyVzJywnJXMnKSBvYmplY3RzejBjYW5ub3QgbXVsdGlwbHkgJ1BhcnNlckVsZW1lbnQnIGFuZCAnJXMnIG9iamVjdHN6L2Nhbm5vdCBtdWx0aXBseSBQYXJzZXJFbGVtZW50IGJ5IG5lZ2F0aXZlIHZhbHVlekBzZWNvbmQgdHVwbGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIGZpcnN0IHR1cGxlIHZhbHVleitjYW5ub3QgbXVsdGlwbHkgUGFyc2VyRWxlbWVudCBieSAwIG9yICgwLDApYwEAAAAAAAAAAAAAAAEAAAAFAAAAEwAAAHMoAAAAfABkAWsEchx0AIgBiAB8AGQBGACDARcAgwFTAHQAiAGDAVMAZABTAHLcAQAAKQFyHQAAAKkB2gFuqQLaEG1ha2VPcHRpb25hbExpc3RyqwAAAHJ5AAAAcnoAAAByPgIAAIYHAABzBgAAAAABCAEUAnovUGFyc2VyRWxlbWVudC5fX211bF9fLjxsb2NhbHM+Lm1ha2VPcHRpb25hbExpc3QpCXJ9AAAAcnYAAADaBXR1cGxlcjQAAAByGwAAAHLrAAAAcsEAAADaClZhbHVlRXJyb3JyCAAAACkFcqsAAAByKwEA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IEV4YW1wbGU6OgogICAgICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKS5zZXROYW1lKCJhbHBoYXdvcmQiKQogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKS5zZXROYW1lKCJudW13b3JkIikKICAgICAgICAgICAgdGVybSA9IHdkIHwgaW50ZWdlcgogICAgICAgICAgICAKICAgICAgICAgICAgIyB0dXJuIG9uIGRlYnVnZ2luZyBmb3Igd2QKICAgICAgICAgICAgd2Quc2V0RGVidWcoKQoKICAgICAgICAgICAgT25lT3JNb3JlKHRlcm0pLnBhcnNlU3RyaW5nKCJhYmMgMTIzIHh5eiA4OTAiKQogICAgICAgIAogICAgICAgIHByaW50czo6CiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMCgxLDEpCiAgICAgICAgICAgIE1hdGNoZWQgYWxwaGF3b3JkIC0+IFsnYWJjJ10KICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAzKDEsNCkKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgNCksIChsaW5lOjEsIGNvbDo1KQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDcoMSw4KQogICAgICAgICAgICBNYXRjaGVkIGFscGhhd29yZCAtPiBbJ3h5eiddCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTEoMSwxMikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTIpLCAobGluZToxLCBjb2w6MTMpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTUoMSwxNikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTUpLCAobGluZToxLCBjb2w6MTYpCgogICAgICAgIFRoZSBvdXRwdXQgc2hvd24gaXMgdGhhdCBwcm9kdWNlZCBieSB0aGUgZGVmYXVsdCBk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AXl0AQB9DQEAepZ0AHwNdBCDAnLkZAhuAmQJfQ5kBHwKdgCQAXIofAugCnQRfA1qEnwKgwKhAQEAfAugCmQKdBN8DWoSfAqDAmQLGAAUAGQMFwB8DhcAoQEBAG4YfAugCmQKfA1qEhQAZAwXAHwOFwChAQEAfAugCmQNdAR8DYMBFwChAQEAfAmQAW9afAZ9CXwNfQxXAFkAZAJ9DX4Nbk5kAn0Nfg0wAAQAdBSQAXm4AQB9DwEAeix8C6AKZA50BHwPgwEXAKEBAQB8CZABb558Bn0JfA99DFcAWQBkAn0Pfg9uCmQCfQ9+DzAAMAB8BZABct58BJABctB8C6AKZAmhAQEAdBVkBKALfAuhAYMBAQB8B6AKfAp8DGYCoQEBAHFEfAl8B2YCUwApD2EzDAAACiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiBvbiBhIHNlcmllcyBvZiB0ZXN0IHN0cmluZ3MsIHNob3dpbmcgZWFjaAogICAgICAgIHRlc3QsIHRoZSBwYXJzZWQgcmVzdWx0cyBvciB3aGVyZSB0aGUgcGFyc2UgZmFpbGVkLiBRdWljayBhbmQgZWFzeSB3YXkgdG8KICAgICAgICBydW4gYSBwYXJzZSBleHByZXNzaW9uIGFnYWluc3QgYSBsaXN0IG9mIHNhbXBsZSBzdHJpbmdzLgogICAgICAgICAgIAogICAgICAgIFBhcmFtZXRlcnM6CiAgICAgICAgIC0gdGVzdHMgLSBhIGxpc3Qgb2Ygc2VwYXJhdGUgdGVzdCBzdHJpbmdzLCBvciBhIG11bHRpbGluZSBzdHJpbmcgb2YgdGVzdCBzdHJpbmdzCiAgICAgICAgIC0gcGFyc2VBbGwgLSAoZGVmYXVsdD1De1RydWV9KSAtIGZsYWcgdG8gcGFzcyB0byBDe0x7cGFyc2VTdHJpbmd9fSB3aGVuIHJ1bm5pbmcgdGVzdHMgICAgICAgICAgIAogICAgICAgICAtIGNvbW1lbnQgLSAoZGVmYXVsdD1DeycjJ30pIC0gZXhwcmVzc2lvbiBmb3IgaW5kaWNhdGluZyBlbWJlZGRlZCBjb21tZW50cyBpbiB0aGUgdGVzdCAKICAgICAgICAgICAgICBzdHJpbmc7IHBhc3MgTm9uZSB0byBkaXNhYmxlIGNvbW1lbnQgZmlsdGVyaW5nCiAgICAgICAgIC0gZnVsbER1bXAgLSAoZGVmYXVsdD1De1RydWV9KSAtIGR1bXAgcmVzdWx0cyBhcyBsaXN0IGZvbGxvd2VkIGJ5IHJlc3VsdHMgbmFtZXMgaW4gbmVzdGVkIG91dGxpbmU7CiAgICAgICAgICAgICAgaWYgRmFsc2UsIG9ubHkgZHVtcCBuZXN0ZWQgbGlzdAogICAgICAgICAtIHByaW50UmVzdWx0cyAtIChkZWZhdWx0PUN7VHJ1ZX0pIHByaW50cyB0ZXN0IG91dHB1dCB0byBzdGRvdXQKICAgICAgICAgLSBmYWlsdXJlVGVzdHMgLSAoZGVmYXVsdD1De0ZhbHNlfSkgaW5kaWNhdGVzIGlmIHRoZXNlIHRlc3RzIGFyZSBleHBlY3RlZCB0byBmYWlsIHBhcnNpbmcKCiAgICAgICAgUmV0dXJuczogYSAoc3VjY2VzcywgcmVzdWx0cykgdHVwbGUsIHdoZXJlIHN1Y2Nlc3MgaW5kaWNhdGVzIHRoYXQgYWxsIHRlc3RzIHN1Y2NlZWRlZAogICAgICAgIChvciBmYWlsZWQgaWYgQ3tmYWlsdXJlVGVzdHN9IGlzIFRydWUpLCBhbmQgdGhlIHJlc3VsdHMgY29udGFpbiBhIGxpc3Qgb2YgbGluZXMgb2YgZWFjaCAKICAgICAgICB0ZXN0J3Mgb3V0cHV0CiAgICAgICAgCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIG51bWJlcl9leHByID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIuY29weSgpCgogICAgICAgICAgICByZXN1bHQgPSBudW1iZXJfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgICAgICMgdW5zaWduZWQgaW50ZWdlcgogICAgICAgICAgICAgICAgMTAwCiAgICAgICAgICAgICAgICAjIG5lZ2F0aXZlIGludGVnZXIKICAgICAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgICAgICMgZmxvYXQgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgICAgICAjIGludGVnZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAgICAgJycnKQogICAgICAgICAgICBwcmludCgiU3VjY2VzcyIgaWYgcmVzdWx0WzBdIGVsc2UgIkZhaWxlZCEiKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHN0cmF5IGNoYXJhY3RlcgogICAgICAgICAgICAgICAgMTAwWgogICAgICAgICAgICAgICAgIyBtaXNzaW5nIGxlYWRpbmcgZGlnaXQgYmVmb3JlICcuJwogICAgICAgICAgICAgICAgLS4xMDAKICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgJy4nCiAgICAgICAgICAgICAgICAzLjE0LjE1OQogICAgICAgICAgICAgICAgJycnLCBmYWlsdXJlVGVzdHM9VHJ1ZSkKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKICAgICAgICBwcmludHM6OgogICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIFsxMDBdCgogICAgICAgICAgICAjIG5lZ2F0aXZlIGludGVnZXIKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICBbLTEwMF0KCiAgICAgICAgICAgICMgZmxvYXQgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICBbMWUtMTJdCgogICAgICAgICAgICBTdWNjZXNzCiAgICAgICAgICAgIAogICAgICAgICAgICAjIHN0cmF5IGNoYXJhY3RlcgogICAgICAgICAgICAxMDBaCiAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0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dHJpbmcgYXMgYSBrZXl3b3JkLCB0aGF0IGlzLCBpdCBtdXN0IGJlCiAgICBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIG5vbi1rZXl3b3JkIGNoYXJhY3Rlci4gIENvbXBhcmUgd2l0aCBDe0x7TGl0ZXJhbH19OgogICAgIC0gQ3tMaXRlcmFsKCJpZiIpfSB3aWxsIG1hdGNoIHRoZSBsZWFkaW5nIEN7J2lmJ30gaW4gQ3snaWZBbmRPbmx5SWYnfS4KICAgICAtIEN7S2V5d29yZCgiaWYiKX0gd2lsbCBub3Q7IGl0IHdpbGwgb25seSBtYXRjaCB0aGUgbGVhZGluZyBDeydpZid9IGluIEN7J2lmIHg9MSd9LCBvciBDeydpZih5PT0yKSd9CiAgICBBY2NlcHRzIHR3byBvcHRpb25hbCBjb25zdHJ1Y3RvciBhcmd1bWVudHMgaW4gYWRkaXRpb24gdG8gdGhlIGtleXdvcmQgc3RyaW5nOgogICAgIC0gQ3tpZGVudENoYXJzfSBpcyBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIHRoYXQgd291bGQgYmUgdmFsaWQgaWRlbnRpZmllciBjaGFyYWN0ZXJzLAogICAgICAgICAgZGVmYXVsdGluZyB0byBhbGwgYWxwaGFudW1lcmljcyArICJfIiBhbmQgIiQiCiAgICAgLSBDe2Nhc2VsZXNzfSBhbGxvd3MgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGluZywgZGVmYXVsdCBpcyBDe0ZhbHNlfS4KICAgICAgIAogICAgRXhhbXBsZTo6CiAgICAgICAgS2V5d29yZCgic3RhcnQiKS5wYXJzZVN0cmluZygic3RhcnQiKSAgIyAtPiBbJ3N0YXJ0J10KICAgICAgICBLZXl3b3JkKCJzdGFydCIpLnBhcnNlU3RyaW5nKCJzdGFydGluZyIpICAjIC0+IEV4Y2VwdGlvbgoKICAgIEZvciBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLCB1c2UgTHtDYXNlbGVzc0tleXdvcmR9LgogICAg+gJfJE5GYwQAAAAAAAAAAAAAAAQAAAAIAAAAAwAAAHOsAAAAdAB0AXwAgwKgAqEAAQB8AmQAdQByHHQBagN9AnwBfABfBHQFfAGDAXwAXwZ6DnwBZAEZAHwAXwdXAG4iBAB0CHlcAQABAAEAdAlqCmQCdAtkA2QEjQMBAFkAbgIwAGQFfABqBBYAfABfDGQGfABqDBcAfABfDWQHfABfDmQHfABfD3wDfABfEHwDcp58AaARoQB8AF8SfAKgEaEAfQJ0E3wCgwF8AF8UZABTACkITnIBAAAAejJudWxsIHN0cmluZyBwYXNzZWQgdG8gS2V5d29yZDsgdXNlIEVtcHR5KCkgaW5zdGVhZHJzAAAAcjICAAByhgIAAHK4AQAARikVcmQCAAByFAAAAHKtAAAA2hVERUZBVUxUX0tFWVdPUkRfQ0hBUlNyhwIAAHL4AAAAcogCAAByiQIAAHLsAAAAcjQCAAByNQIAAHI2AgAActoAAABysAEAAHKqAQAAcq8BAADaCGNhc2VsZXNz2gV1cHBlctoNY2FzZWxlc3NtYXRjaHL2AQAA2gppZGVudENoYXJzKQRyqwAAAHKLAgAAcpICAAByjwIAAHJlAgAAcnkAAAByegAAAHKtAAAAmgkAAHMoAAAAAAEOAQgBBgEGAQoBAgEOAQwBBgEE/wwCDAEMAQYBBgEGAQQBCgEIAXoQS2V5d29yZC5fX2luaXRfX1RjBAAAAAAAAAAAAAAABAAAAAUAAABDAAAAcwYBAAB8AGoAcnx8AXwCfAJ8AGoBFwCFAhkAoAKhAHwAagNrAnLyfAJ0BHwBgwF8AGoBGABrBXNMfAF8AnwAagEXABkAoAKhAHwAagV2AXLyfAJkAWsCc2p8AXwCZAIYABkAoAKhAHwAagV2AXLyfAJ8AGoBFwB8AGoGZgJTAG52fAF8AhkAfABqB2sCcvJ8AGoBZAJrAnOifAGgCHwAagZ8AqECcvJ8AnQEfAGDAXwAagEYAGsFc8h8AXwCfABqARcAGQB8AGoFdgFy8nwCZAFrAnPifAF8AmQCGAAZAHwAagV2AXLyfAJ8AGoBFwB8AGoGZgJTAHQJfAF8AnwAagp8AIMEggFkAFMAcvcAAAApC3KPAgAAcogCAABykAIAAHKRAgAAcvgAAABykgIAAHKHAgAAcokCAAByjAIAAHIhAAAAcrABAABy4AEAAHJ5AAAAcnkAAAByegAAAHLhAQAArwkAAHM0AAAAAAEGARwBEP8CARb/AgIG/gICFP4CAxICDgEI/wIBDP8CAhD+AgIS/gIDBv0CAxD9AgQQAXoRS2V5d29yZC5wYXJzZUltcGxjAQAAAAAAAAAAAAAAAgAAAAMAAAADAAAAcxoAAAB0AHQBfACDAqACoQB9AXQBagN8AV8EfAFTAHKJAAAAKQVyZAIAAHIUAAAAcukAAAByjgIAAHKSAgAAKQJyqwAAAHKkAAAAcmUCAAByeQAAAHJ6AAAAcukAAAC9CQAAcwYAAAAAAQ4BCAF6DEtleXdvcmQuY29weWMBAAAAAAAAAAAAAAABAAAAAgAAAEMAAABzCgAAAHwAdABfAWQBUwApAnosT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IEtleXdvcmQgY2hhcnMKICAgICAgICBOKQJyFAAAAHKOAgAAcp0BAAByeQAAAHJ5AAAAcnoAAADaFnNldERlZmF1bHRLZXl3b3JkQ2hhcnPCCQAAcwIAAAAABHoeS2V5d29yZC5zZXREZWZhdWx0S2V5d29yZENoYXJzKQJORikBVCkMcpsAAABynAAAAHKdAAAAcsMAAAByNQAAAHKOAgAAcq0AAABy4QEAAHLpAAAAcn8CAABykwIAAHKBAgAAcnkAAAByeQAAAHJlAgAAcnoAAAByFAAAAIcJAABzDgAAAAgBBBAIAg4VCg4MBQIBchQAAABjAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAcyoAAABlAFoBZABaAmQBWgOHAGYBZAJkA4QIWgRkB2QFZAaEAVoFhwAEAFoGUwApCHIKAAAAYWwBAAAKICAgIFRva2VuIHRvIG1hdGNoIGEgc3BlY2lmaWVkIHN0cmluZywgaWdub3JpbmcgY2FzZSBvZiBsZXR0ZXJzLgogICAgTm90ZTogdGhlIG1hdGNoZWQgcmVzdWx0cyB3aWxsIGFsd2F5cyBiZSBpbiB0aGUgY2FzZSBvZiB0aGUgZ2l2ZW4KICAgIG1hdGNoIHN0cmluZywgTk9UIHRoZSBjYXNlIG9mIHRoZSBpbnB1dCB0ZXh0LgoKICAgIEV4YW1wbGU6OgogICAgICAgIE9uZU9yTW9yZShDYXNlbGVzc0xpdGVyYWwoIkNNRCIpKS5wYXJzZVN0cmluZygiY21kIENNRCBDbWQxMCIpICMgLT4gWydDTUQnLCAnQ01EJywgJ0NNRCddCiAgICAgICAgCiAgICAoQ29udHJhc3Qgd2l0aCBleGFtcGxlIGZvciBMe0Nhc2VsZXNzS2V5d29yZH0uKQogICAgYwIAAAAAAAAAAAAAAAIAAAAEAAAAAwAAAHM2AAAAdAB0AXwAgwKgAnwBoAOhAKEBAQB8AXwAXwRkAXwAagQWAHwAXwVkAnwAagUXAHwAXwZkAFMAKQNOegQnJXMncrgBAAApB3JkAgAAcgoAAAByrQAAAHKQAgAA2gxyZXR1cm5TdHJpbmdy2gAAAHKwAQAAcooCAAByZQIAAHJ5AAAAcnoAAAByrQAAANMJAABzCAAAAAABFAIGAQwBehhDYXNlbGVzc0xpdGVyYWwuX19pbml0X19UYwQAAAAAAAAAAAAAAAQAAAAFAAAAQwAAAHNAAAAAfAF8AnwCfABqABcAhQIZAKABoQB8AGoCawJyLHwCfABqABcAfABqA2YCUwB0BHwBfAJ8AGoFfACDBIIBZABTAHKJAAAAKQZyiAIAAHKQAgAAcocCAABylAIAAHIhAAAAcrABAABy4AEAAHJ5AAAAcnkAAAByegAAAHLhAQAA2gkAAHMGAAAAAAEcARABehlDYXNlbGVzc0xpdGVyYWwucGFyc2VJbXBsKQFUcoUCAAByeQAAAHJ5AAAAcmUCAAByegAAAHIKAAAAyAkAAHMGAAAACAEECgwHcgoAAABjAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAcywAAABlAFoBZABaAmQBWgNkCIcAZgFkA2QEhAlaBGQJZAZkB4QBWgWHAAQAWgZTACkKcgkAAAB60AogICAgQ2FzZWxlc3MgdmVyc2lvbiBvZiBMe0tleXdvcmR9LgoKICAgIEV4YW1wbGU6OgogICAgICAgIE9uZU9yTW9yZShDYXNlbGVzc0tleXdvcmQoIkNNRCIpKS5wYXJzZVN0cmluZygiY21kIENNRCBDbWQxMCIpICMgLT4gWydDTUQnLCAnQ01EJ10KICAgICAgICAKICAgIChDb250cmFzdCB3aXRoIGV4YW1wbGUgZm9yIEx7Q2FzZWxlc3NMaXRlcmFsfS4pCiAgICBOYwMAAAAAAAAAAAAAAAMAAAAFAAAAAwAAAHMaAAAAdAB0AXwAgwJqAnwBfAJkAWQCjQMBAGQAUwApA05UqQFyjwIAACkDcmQCAAByCQAAAHKtAAAAKQNyqwAAAHKLAgAAcpICAAByZQIAAHJ5AAAAcnoAAAByrQAAAOgJAABzAgAAAAABehhDYXNlbGVzc0tleXdvcmQuX19pbml0X19UYwQAAAAAAAAAAAAAAAQAAAAFAAAAQwAAAHNqAAAAfAF8AnwCfABqABcAhQIZAKABoQB8AGoCawJyVnwCdAN8AYMBfABqABgAawVzRnwBfAJ8AGoAFwAZAKABoQB8AGoEdgFyVnwCfABqABcAfABqBWYCUwB0BnwBfAJ8AGoHfACDBIIBZABTAHKJAAAAKQhyiAIAAHKQAgAAcpECAABy+AAAAHKSAgAAcocCAAByIQAAAHKwAQAAcuABAAByeQAAAHJ5AAAAcnoAAABy4QEAAOsJAABzDgAAAAABHAEQ/wIBFv8CAhABehlDYXNlbGVzc0tleXdvcmQucGFyc2VJbXBsKQFOKQFUcoUCAAByeQAAAHJ5AAAAcmUCAAByegAAAHIJAAAA3wkAAHMGAAAACAEECA4DcgkAAABjAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAcywAAABlAFoBZABaAmQBWgNkCIcAZgFkA2QEhAlaBGQJZAZkB4QBWgWHAAQAWgZTACkKcm4AAABheAUAAAogICAgQSB2YXJpYXRpb24gb24gTHtMaXRlcmFsfSB3aGljaCBtYXRjaGVzICJjbG9zZSIgbWF0Y2hlcywgdGhhdCBpcywgCiAgICBzdHJpbmdzIHdpdGggYXQgbW9zdCAnbicgbWlzbWF0Y2hpbmcgY2hhcmFjdGVycy4gQ3tDbG9zZU1hdGNofSB0YWtlcyBwYXJhbWV0ZXJzOgogICAgIC0gQ3ttYXRjaF9zdHJpbmd9IC0gc3RyaW5nIHRvIGJlIG1hdGNoZWQKICAgICAtIEN7bWF4TWlzbWF0Y2hlc30gLSAoQ3tkZWZhdWx0PTF9KSBtYXhpbXVtIG51bWJlciBvZiBtaXNtYXRjaGVzIGFsbG93ZWQgdG8gY291bnQgYXMgYSBtYXRjaAogICAgCiAgICBUaGUgcmVzdWx0cyBmcm9tIGEgc3VjY2Vzc2Z1bCBwYXJzZSB3aWxsIGNvbnRhaW4gdGhlIG1hdGNoZWQgdGV4dCBmcm9tIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHRoZSBmb2xsb3dpbmcgbmFtZWQgcmVzdWx0czoKICAgICAtIEN7bWlzbWF0Y2hlc30gLSBhIGxpc3Qgb2YgdGhlIHBvc2l0aW9ucyB3aXRoaW4gdGhlIG1hdGNoX3N0cmluZyB3aGVyZSBtaXNtYXRjaGVzIHdlcmUgZm91bmQKICAgICAtIEN7b3JpZ2luYWx9IC0gdGhlIG9yaWdpbmFsIG1hdGNoX3N0cmluZyB1c2VkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgaW5wdXQgc3RyaW5nCiAgICAKICAgIElmIEN7bWlzbWF0Y2hlc30gaXMgYW4gZW1wdHkgbGlzdCwgdGhlbiB0aGUgbWF0Y2ggd2FzIGFuIGV4YWN0IG1hdGNoLgogICAgCiAgICBFeGFtcGxlOjoKICAgICAgICBwYXR0ID0gQ2xvc2VNYXRjaCgiQVRDQVRDR0FBVEdHQSIpCiAgICAgICAgcGF0dC5wYXJzZVN0cmluZygiQVRDQVRDR0FBWEdHQSIpICMgLT4gKFsnQVRDQVRDR0FBWEdHQSddLCB7J21pc21hdGNoZXMnOiBbWzldXSwgJ29yaWdpbmFsJzogWydBVENBVENHQUFUR0dBJ119KQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FYQ0dBQVhHR0EiKSAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgJ0FUQ0FUQ0dBQVRHR0EnICh3aXRoIHVwIHRvIDEgbWlzbWF0Y2hlcykgKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQoKICAgICAgICAjIGV4YWN0IG1hdGNoCiAgICAgICAgcGF0dC5wYXJzZVN0cmluZygiQVRDQVRDR0FBVEdHQSIpICMgLT4gKFsnQVRDQVRDR0FBVEdHQSddLCB7J21pc21hdGNoZXMnOiBbW11dLCAnb3JpZ2luYWwnOiBbJ0FUQ0FUQ0dBQVRHR0EnXX0pCgogICAgICAgICMgY2xvc2UgbWF0Y2ggYWxsb3dpbmcgdXAgdG8gMiBtaXNtYXRjaGVzCiAgICAgICAgcGF0dCA9IENsb3NlTWF0Y2goIkFUQ0FUQ0dBQVRHR0EiLCBtYXhNaXNtYXRjaGVzPTIpCiAgICAgICAgcGF0dC5wYXJzZVN0cmluZygiQVRDQVhDR0FBWEdHQSIpICMgLT4gKFsnQVRDQVhDR0FBWEdHQSddLCB7J21pc21hdGNoZXMnOiBbWzQsIDldXSwgJ29yaWdpbmFsJzogWydBVENBVENHQUFUR0dBJ119KQogICAgco0AAABjAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAc0IAAAB0AHQBfACDAqACoQABAHwBfABfA3wBfABfBHwCfABfBWQBfABqBHwAagVmAhYAfABfBmQCfABfB2QCfABfCGQAUwApA056JkV4cGVjdGVkICVyICh3aXRoIHVwIHRvICVkIG1pc21hdGNoZXMpRikJcmQCAABybgAAAHKtAAAActoAAADaDG1hdGNoX3N0cmluZ9oNbWF4TWlzbWF0Y2hlc3KwAQAAcq8BAAByqgEAACkDcqsAAABylgIAAHKXAgAAcmUCAAByeQAAAHJ6AAAAcq0AAAAKCgAAcw4AAAAAAQ4BBgEGAQYBEgEGAXoTQ2xvc2VNYXRjaC5fX2luaXRfX1RjBAAAAAAAAAAAAAAADwAAAAUAAABDAAAAc8oAAAB8An0EdAB8AYMBfQV8BHQAfABqAYMBFwB9BnwGfAVrAXK2fABqAX0HZAF9CGcAfQl8AGoCfQp0A3QEfAF8AnwGhQIZAHwAagGDAoMBRABdMlwCfQh9C3wLXAJ9DH0NfAx8DWsDck58CaAFfAihAQEAdAB8CYMBfAprBHJOAQBxtnFOfAhkAhcAfQJ0BnwBfAR8AoUCGQBnAYMBfQ58AGoBfA5kAzwAfAl8DmQEPAB8AnwOZgJTAHQHfAF8AnwAagh8AIMEggFkAFMAKQVOcgEAAAByjQAAANoIb3JpZ2luYWzaCm1pc21hdGNoZXMpCXL4AAAAcpYCAABylwIAAHL9AAAAcpIAAAByJAEAAHIkAAAAciEAAABysAEAACkPcqsAAABydQEAAHKmAAAAcsIBAADaBXN0YXJ0ct4BAADaBm1heGxvY3KWAgAA2g9tYXRjaF9zdHJpbmdsb2NymQIAAHKXAgAA2gNzX23aA3NyY9oDbWF02gdyZXN1bHRzcnkAAAByeQAAAHJ6AAAAcuEBAAATCgAAcygAAAAAAQQBCAEOAggBBgEEAQQBBgIgAQgBCAEKAQwBBgIIARIBCgEIAQgCehRDbG9zZU1hdGNoLnBhcnNlSW1wbCkBco0AAAApAVRyhQIAAHJ5AAAAcnkAAAByZQIAAHJ6AAAAcm4AAADxCQAAcwYAAAAIAQQYDglybgAAAGMAAAAAAAAAAAAAAAAAAAAABgAAAAAAAABzOAAAAGUAWgFkAFoCZAFaA2QNhwBmAWQGZAeECVoEZA5kCWQKhAFaBYcAZgFkC2QMhAhaBocABABaB1MAKQ9yMQAAAGEUCQAACiAgICBUb2tlbiBmb3IgbWF0Y2hpbmcgd29yZHMgY29tcG9zZWQgb2YgYWxsb3dlZCBjaGFyYWN0ZXIgc2V0cy4KICAgIERlZmluZWQgd2l0aCBzdHJpbmcgY29udGFpbmluZyBhbGwgYWxsb3dlZCBpbml0aWFsIGNoYXJhY3RlcnMsCiAgICBhbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyBhbGxvd2VkIGJvZHkgY2hhcmFjdGVycyAoaWYgb21pdHRlZCwKICAgIGRlZmF1bHRzIHRvIHRoZSBpbml0aWFsIGNoYXJhY3RlciBzZXQpLCBhbmQgYW4gb3B0aW9uYWwgbWluaW11bSwKICAgIG1heGltdW0sIGFuZC9vciBleGFjdCBsZW5ndGguICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgQ3ttaW59IGlzIDEgKGEKICAgIG1pbmltdW0gdmFsdWUgPCAxIGlzIG5vdCB2YWxpZCk7IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgQ3ttYXh9IGFuZCBDe2V4YWN0fQogICAgYXJlIDAsIG1lYW5pbmcgbm8gbWF4aW11bSBvciBleGFjdCBsZW5ndGggcmVzdHJpY3Rpb24uIEFuIG9wdGlvbmFsCiAgICBDe2V4Y2x1ZGVDaGFyc30gcGFyYW1ldGVyIGNhbiBsaXN0IGNoYXJhY3RlcnMgdGhhdCBtaWdodCBiZSBmb3VuZCBpbiAKICAgIHRoZSBpbnB1dCBDe2JvZHlDaGFyc30gc3RyaW5nOyB1c2VmdWwgdG8gZGVmaW5lIGEgd29yZCBvZiBhbGwgcHJpbnRhYmxlcwogICAgZXhjZXB0IGZvciBvbmUgb3IgdHdvIGNoYXJhY3RlcnMsIGZvciBpbnN0YW5jZS4KICAgIAogICAgTHtzcmFuZ2V9IGlzIHVzZWZ1bCBmb3IgZGVmaW5pbmcgY3VzdG9tIGNoYXJhY3RlciBzZXQgc3RyaW5ncyBmb3IgZGVmaW5pbmcgCiAgICBDe1dvcmR9IGV4cHJlc3Npb25zLCB1c2luZyByYW5nZSBub3RhdGlvbiBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbiBjaGFyYWN0ZXIgc2V0cy4KICAgIAogICAgQSBjb21tb24gbWlzdGFrZSBpcyB0byB1c2UgQ3tXb3JkfSB0byBtYXRjaCBhIHNwZWNpZmljIGxpdGVyYWwgc3RyaW5nLCBhcyBpbiAKICAgIEN7V29yZCgiQWRkcmVzcyIpfS4gUmVtZW1iZXIgdGhhdCBDe1dvcmR9IHVzZXMgdGhlIHN0cmluZyBhcmd1bWVudCB0byBkZWZpbmUKICAgIEl7c2V0c30gb2YgbWF0Y2hhYmxlIGNoYXJhY3RlcnMuIFRoaXMgZXhwcmVzc2lvbiB3b3VsZCBtYXRjaCAiQWRkIiwgIkFBQSIsCiAgICAiZEFyZWQiLCBvciBhbnkgb3RoZXIgd29yZCBtYWRlIHVwIG9mIHRoZSBjaGFyYWN0ZXJzICdBJywgJ2QnLCAncicsICdlJywgYW5kICdzJy4KICAgIFRvIG1hdGNoIGFuIGV4YWN0IGxpdGVyYWwgc3RyaW5nLCB1c2UgTHtMaXRlcmFsfSBvciBMe0tleXdvcmR9LgoKICAgIHB5cGFyc2luZyBpbmNsdWRlcyBoZWxwZXIgc3RyaW5ncyBmb3IgYnVpbGRpbmcgV29yZHM6CiAgICAgLSBMe2FscGhhc30KICAgICAtIEx7bnVtc30KICAgICAtIEx7YWxwaGFudW1zfQogICAgIC0gTHtoZXhudW1zfQogICAgIC0gTHthbHBoYXM4Yml0fSAoYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIGluIEFTQ0lJIHJhbmdlIDEyOC0yNTUgLSBhY2NlbnRlZCwgdGlsZGVkLCB1bWxhdXRlZCwgZXRjLikKICAgICAtIEx7cHVuYzhiaXR9IChub24tYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIGluIEFTQ0lJIHJhbmdlIDEyOC0yNTUgLSBjdXJyZW5jeSwgc3ltYm9scywgc3VwZXJzY3JpcHRzLCBkaWFjcml0aWNhbHMsIGV0Yy4pCiAgICAgLSBMe3ByaW50YWJsZXN9IChhbnkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyKQoKICAgIEV4YW1wbGU6OgogICAg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BGQMZAdkCIQBWgWHAGYBZAlkCoQIWgaHAAQAWgdTACkNcicAAABhqwUAAAogICAgVG9rZW4gZm9yIG1hdGNoaW5nIHN0cmluZ3MgdGhhdCBhcmUgZGVsaW1pdGVkIGJ5IHF1b3RpbmcgY2hhcmFjdGVycy4KICAgIAogICAgRGVmaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKICAgICAgICAtIHF1b3RlQ2hhciAtIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGRlZmluaW5nIHRoZSBxdW90ZSBkZWxpbWl0aW5nIHN0cmluZwogICAgICAgIC0gZXNjQ2hhciAtIGNoYXJhY3RlciB0byBlc2NhcGUgcXVvdGVzLCB0eXBpY2FsbHkgYmFja3NsYXNoIChkZWZhdWx0PUN7Tm9uZX0pCiAgICAgICAgLSBlc2NRdW90ZSAtIHNwZWNpYWwgcXVvdGUgc2VxdWVuY2UgdG8gZXNjYXBlIGFuIGVtYmVkZGVkIHF1b3RlIHN0cmluZyAoc3VjaCBhcyBTUUwncyAiIiB0byBlc2NhcGUgYW4gZW1iZWRkZWQgIikgKGRlZmF1bHQ9Q3tOb25lfSkKICAgICAgICAtIG11bHRpbGluZSAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHF1b3RlcyBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcyAoZGVmYXVsdD1De0ZhbHNlfSkKICAgICAgICAtIHVucXVvdGVSZXN1bHRzIC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hdGNoZWQgdGV4dCBzaG91bGQgYmUgdW5xdW90ZWQgKGRlZmF1bHQ9Q3tUcnVlfSkKICAgICAgICAtIGVuZFF1b3RlQ2hhciAtIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGRlZmluaW5nIHRoZSBlbmQgb2YgdGhlIHF1b3RlIGRlbGltaXRlZCBzdHJpbmcgKGRlZmF1bHQ9Q3tOb25lfSA9PiBzYW1lIGFzIHF1b3RlQ2hhcikKICAgICAgICAtIGNvbnZlcnRXaGl0ZXNwYWNlRXNjYXBlcyAtIGNvbnZlcnQgZXNjYXBlZCB3aGl0ZXNwYWNlIChD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ICAgICAgc2hhcGVfdHlwZSA9IG9uZU9mKCJTUVVBUkUgQ0lSQ0xFIFRSSUFOR0xFIFNUQVIgSEVYQUdPTiBPQ1RBR09OIikKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIHNoYXBlX2F0dHIgPSAic2hhcGU6IiArIHNoYXBlX3R5cGUoInNoYXBlIikKICAgICAgICBwb3NuX2F0dHIgPSAicG9zbjoiICsgR3JvdXAoaW50ZWdlcigieCIpICsgJywnICsgaW50ZWdlcigieSIpKSgicG9zbiIpCiAgICAgICAgY29sb3JfYXR0ciA9ICJjb2xvcjoiICsgY29sb3IoImNvbG9yIikKICAgICAgICBzaXplX2F0dHIgPSAic2l6ZToiICsgaW50ZWdlcigic2l6ZSIpCgogICAgICAgICMgdXNlIEVhY2ggKHVzaW5nIG9wZXJhdG9yICcmJykgdG8gYWNjZXB0IGF0dHJpYnV0ZXMgaW4gYW55IG9yZGVyIAogICAgICAgICMgKHNoYXBlIGFuZCBwb3NuIGFyZSByZXF1aXJlZCwgY29sb3IgYW5kIHNpemUgYXJlIG9wdGlvbmFsKQogICAgICAgIHNoYXBlX3NwZWMgPSBzaGFwZV9hdHRyICYgcG9zbl9hdHRyICYgT3B0aW9uYWwoY29sb3JfYXR0cikgJiBPcHRpb25hbChzaXplX2F0dHIpCgogICAgICAgIHNoYXBlX3NwZWMucnVuVGVzdHMoJycnCiAgICAgICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgICAgIHNoYXBlOiBDSVJDTEUgc2l6ZTogNTAgY29sb3I6IEJMVUUgcG9zbjogNTAsODAKICAgICAgICAgICAgY29sb3I6R1JFRU4gc2l6ZToyMCBzaGFwZTpUUklBTkdMRSBwb3NuOjIwLDQwCiAgICAgICAgICAgICcnJwogICAgICAgICAgICApCiAgICBwcmludHM6OgogICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgWydzaGFwZTonLCAnU1FVQVJFJywgJ2NvbG9yOicsICdCTEFDSycsICdwb3NuOicsIFsnMTAwJywgJywnLCAnMTIwJ11dCiAgICAgICAgLSBjb2xvcjogQkxBQ0sKICAgICAgICAtIHBvc246IFsnMTAwJywgJywnLCAnMTIwJ10KICAgICAgICAgIC0geDogMTAwCiAgICAgICAgICAtIHk6IDEyMAogICAgICAgIC0gc2hhcGU6IFNRVUFSRQoKCiAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgIFsnc2hhcGU6JywgJ0NJUkNMRScsICdzaXplOicsICc1MCcsICdjb2xvcjonLCAnQkxVRScsICdwb3NuOicsIFsnNTAnLCAnLCcsICc4MCddXQogICAgICAgIC0gY29sb3I6IEJMVUUKICAgICAgICAtIHBvc246IFsnNTAnLCAnLCcsICc4MCddCiAgICAgICAgICAtIHg6IDUwCiAgICAgICAgICAtIHk6IDgwCiAgICAgICAgLSBzaGFwZTogQ0lSQ0xFCiAgICAgICAgLSBzaXplOiA1MAoKCiAgICAgICAgY29sb3I6IEdSRUVOIHNpemU6IDIwIHNoYXBlOiBUUklBTkdMRSBwb3NuOiAyMCw0MAogICAgICAgIFsnY29sb3I6JywgJ0dSRUVOJywgJ3NpemU6JywgJzIwJywgJ3NoYXBlOicsICdUUklBTkdMRScsICdwb3NuOicsIFsnMjAnLCAnLCcsICc0MCddXQogICAgICAgIC0gY29sb3I6IEdSRUVOCiAgICAgICAgLSBwb3NuOiBbJzIwJywgJywnLCAnNDAnXQogICAgICAgICAgLSB4OiAyMAogICAgICAgICAgLSB5OiA0MAogICAgICAgIC0gc2hhcGU6IFRSSUFOR0xFCiAgICAgICAgLSBzaXplOiAyMAogICAgVGMDAAAAAAAAAAAAAAADAAAABAAAAAMAAABzOAAAAHQAdAF8AIMCoAJ8AXwCoQIBAHQDZAFkAoQAfABqBEQAgwGDAXwAXwVkA3wAXwZkA3wAXwdkAFMAKQROYwEAAAAAAAAAAAAAAAIAAAACAAAAcwAAAHMUAAAAfABdDH0BfAFqAFYAAQBxAmQAUwByiQAAAHLzAgAAcu8CAAByeQAAAHJ5AAAAcnoA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cmUCAAByegAAAHIkAwAACg8AAHMEAAAACAEOCHIkAwAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBFMAKQVyGwAAAGGDBAAACiAgICBSZXBldGl0aW9uIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBnaXZlbiBleHByZXNzaW9uLgogICAgCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gZXhwciAtIGV4cHJlc3Npb24gdGhhdCBtdXN0IG1hdGNoIG9uZSBvciBtb3JlIHRpbWVzCiAgICAgLSBzdG9wT24gLSAoZGVmYXVsdD1De05vbmV9KSAtIGV4cHJlc3Npb24gZm9yIGEgdGVybWluYXRpbmcgc2VudGluZWwKICAgICAgICAgIChvbmx5IHJlcXVpcmVkIGlmIHRoZSBzZW50aW5lbCB3b3VsZCBvcmRpbmFyaWx5IG1hdGNoIHRoZSByZXBldGl0aW9uIAogICAgICAgICAgZXhwcmVzc2lvbikgICAgICAgICAgCgogICAgRXhhbXBsZTo6CiAgICAgICAgZGF0YV93b3JkID0gV29yZChhbHBoYXMpCiAgICAgICAgbGFiZWwgPSBkYXRhX3dvcmQgKyBGb2xsb3dlZEJ5KCc6JykKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCgogICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBCTEFDSyIKICAgICAgICBPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5wcHJpbnQoKSAgIyBGYWlsISByZWFkICdjb2xvcicgYXMgZGF0YSBpbnN0ZWFkIG9mIG5leHQgbGFiZWwgLT4gW1snc2hhcGUnLCAnU1FVQVJFIGNvbG9yJ11dCgogICAgICAgICMgdXNlIHN0b3BPbiBhdHRyaWJ1dGUgZm9yIE9uZU9yTW9yZSB0byBhdm9pZCByZWFkaW5nIGxhYmVsIHN0cmluZyBhcyBwYXJ0IG9mIHRoZSBkYXRhCiAgICAgICAgYXR0cl9leHByID0gR3JvdXAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCiAgICAgICAgT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkucHByaW50KCkgIyBCZXR0ZXIgLT4gW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsncG9zbicsICd1cHBlciBsZWZ0J10sIFsnY29sb3InLCAnQkxBQ0snXV0KICAgICAgICAKICAgICAgICAjIGNvdWxkIGFsc28gYmUgd3JpdHRlbiBhcwogICAgICAgIChhdHRyX2V4cHIgKiAoMSwpKS5wYXJzZVN0cmluZyh0ZXh0KS5wcHJpbnQoKQogICAgYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHM0AAAAdAB8AGQBgwJyEHwAagFTAHwAagJkAHUAci5kAnQDfABqBIMBFwBkAxcAfABfAnwAagJTACkETnLaAAAAcvsCAAB6BH0uLi5yIwMAAHK1AAAAcnkAAAByeQAAAHJ6AAAAcrYAAABKDwAAcwoAAAAAAQoBBgIKARQCehFPbmVPck1vcmUuX19zdHJfX04pBXKbAAAAcpwAAABynQAAAHLDAAAAcrYAAAByeQAAAHJ5AAAAcnkAAAByegAAAHIbAAAAMA8AAHMEAAAACAEEGXIbAAAAYwAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAHM4AAAAZQBaAWQAWgJkAVoDZAqHAGYBZANkBIQJWgRkC4cAZgFkBmQHhAlaBWQIZAmEAFoGhwAEAFoHUwApDHI0AAAAYXcBAAAKICAgIE9wdGlvbmFsIHJlcGV0aXRpb24gb2YgemVybyBvciBtb3JlIG9mIHRoZSBnaXZlbiBleHByZXNzaW9uLgogICAgCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gZXhwciAtIGV4cHJlc3Npb24gdGhhdCBtdXN0IG1hdGNoIHplcm8gb3IgbW9yZSB0aW1lcwogICAgIC0gc3RvcE9uIC0gKGRlZmF1bHQ9Q3tOb25lfSkgLSBleHByZXNzaW9uIGZvciBhIHRlcm1pbmF0aW5nIHNlbnRpbmVsCiAgICAgICAgICAob25seSByZXF1aXJlZCBpZiB0aGUgc2VudGluZWwgd291bGQgb3JkaW5hcmlseSBtYXRjaCB0aGUgcmVwZXRpdGlvbiAKICAgICAgICAgIGV4cHJlc3Npb24pICAgICAgICAgIAoKICAgIEV4YW1wbGU6IHNpbWlsYXIgdG8gTHtPbmVPck1vcmV9CiAgICBOYwMAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHMeAAAAdAB0AXwAgwJqAnwBfAJkAY0CAQBkAnwAXwNkAFMAKQNOKQFyJgMAAFQpBHJkAgAAcjQAAAByrQAAAHKqAQAAKQNyqwAAAHJ2AQAAciYDAAByZQIAAHJ5AAAAcnoAAAByrQAAAF8PAABzBAAAAAABFAF6E1plcm9Pck1vcmUuX19pbml0X19UYwQAAAAAAAAAAAAAAAQAAAAJAAAAAwAAAHM6AAAAehZ0AHQBfACDAqACfAF8AnwDoQNXAFMABAB0A3QEZgJ5NAEAAQABAHwCZwBmAgYAWQBTADAAZABTAHKJAAAAKQVyZAIAAHI0AAAAcuEBAAByIQAAAHLsAAAAcuABAAByZQIAAHJ5AAAAcnoAAABy4QEAAGMPAABzCAAAAAABAgEWARABehRaZXJvT3JNb3JlLnBhcnNlSW1wbGMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAABzNAAAAHQAfABkAYMCchB8AGoBUwB8AGoCZAB1AHIuZAJ0A3wAagSDARcAZAMXAHwAXwJ8AGoCUwApBE5y2gAAAHI5AQAA+gRdLi4uciMDAABytQAAAHJ5AAAAcnkAAAByegAAAHK2AAAAaQ8AAHMKAAAAAAEKAQYCCgEUAnoSWmVyb09yTW9yZS5fX3N0cl9fKQFOKQFUcroCAAByeQAAAHJ5AAAAcmUCAAByegAAAHI0AAAAUw8AAHMIAAAACAEECw4EDgZyNAAAAGMAAAAAAAAAAAAAAAAAAAAAAgAAAEAAAABzIAAAAGUAWgFkAFoCZAFkAoQAWgNlA1oEZANkBIQAWgVkBVMAKQbaCl9OdWxsVG9rZW5jAQAAAAAAAAAAAAAAAQAAAAEAAABDAAAAcwQAAABkAVMAcgACAAByeQAAAHK1AAAAcnkAAAByeQAAAHJ6AAAAcggBAABzDwAAcwIAAAAAAXoTX051bGxUb2tlbi5fX2Jvb2xfX2MBAAAAAAAAAAAAAAABAAAAAQAAAEMAAABzBAAAAGQBUwBypQAAAHJ5AAAAcrUAAAByeQAAAHJ5AAAAcnoAAABytgAAAHYPAABzAgAAAAABehJfTnVsbFRva2VuLl9fc3RyX19OKQZymwAAAHKcAAAAcp0AAAByCAEAAHJtAQAAcrYAAAByeQAAAHJ5AAAAcnkAAAByegAAAHIwAwAAcg8AAHMGAAAACAEIAgQBcjADAABjAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAczYAAABlAFoBZABaAmQBWgNlBGYBhwBmAWQCZAOECVoFZAlkBWQGhAFaBmQHZAiEAFoHhwAEAFoIUwApCnIdAAAAYWEDAAAKICAgIE9wdGlvbmFsIG1hdGNoaW5nIG9mIHRoZSBnaXZlbiBleHByZXNzaW9uLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggemVybyBvciBtb3JlIHRpbWVzCiAgICAgLSBkZWZhdWx0IChvcHRpb25hbCkgLSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgb3B0aW9uYWwgZXhwcmVzc2lvbiBpcyBub3QgZm91bmQuCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyBVUyBwb3N0YWwgY29kZSBjYW4gYmUgYSA1LWRpZ2l0IHppcCwgcGx1cyBvcHRpb25hbCA0LWRpZ2l0IHF1YWxpZmllcgogICAgICAgIHppcCA9IENvbWJpbmUoV29yZChudW1zLCBleGFjdD01KSArIE9wdGlvbmFsKCctJyArIFdvcmQobnVtcywgZXhhY3Q9NCkpKQogICAgICAgIHppcC5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgICAgICAxMjM0NQogICAgICAgICAgICAKICAgICAgICAgICAgIyBaSVArNCBmb3JtCiAgICAgICAgICAgIDEyMTAxLTAwMDEKICAgICAgICAgICAgCiAgICAgICAgICAgICMgaW52YWxpZCBaSVAKICAgICAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICcnJykKICAgIHByaW50czo6CiAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgIDEyMzQ1CiAgICAgICAgWycxMjM0NSddCgogICAgICAgICMgWklQKzQgZm9ybQogICAgICAgIDEyMTAxLTAwMDEKICAgICAgICBbJzEyMTAxLTAwMDEnXQoKICAgICAgICAjIGludmFsaWQgWklQCiAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICBeCiAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgNSksIChsaW5lOjEsIGNvbDo2KQogICAgYwMAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHMuAAAAdAB0AXwAgwJqAnwBZAFkAo0CAQB8AGoDagR8AF8EfAJ8AF8FZAN8AF8GZABTACkETkZygwIAAFQpB3JkAgAAch0AAAByrQAAAHJ2AQAAcqYBAAByIQEAAHKqAQAAKQNyqwAAAHJ2AQAAchsBAAByZQIAAHJ5AAAAcnoAAAByrQAAAJ0PAABzCAAAAAABFAEKAQYBehFPcHRpb25hbC5fX2luaXRfX1RjBAAAAAAAAAAAAAAABQAAAAkAAABDAAAAc3gAAAB6HHwAagBqAXwBfAJ8A2QBZAKNBFwCfQJ9BFcAblIEAHQCdANmAnluAQABAAEAfABqBHQFdQFyZnwAagBqBnJcdAd8AGoEZwGDAX0EfABqBHwEfABqAGoGPABxanwAagRnAX0EbgRnAH0EWQBuAjAAfAJ8BGYCUwByKAMAACkIcnYBAAByyAEAAHIhAAAAcuwAAAByIQEAANoTX29wdGlvbmFsTm90TWF0Y2hlZHKlAQAAciQAAAApBXKrAAAAcnUBAABypgAAAHLCAQAAcugBAAByeQAAAHJ5AAAAcnoAAABy4QEAAKMPAABzFAAAAAABAgEcARABCgEIAQwBEAIKAgoBehJPcHRpb25hbC5wYXJzZUltcGxjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAczQAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAdQByLmQCdAN8AGoEgwEXAGQDFwB8AF8CfABqAlMAKQROctoAAAByOQEAAHI8AQAAciMDAABytQAAAHJ5AAAAcnkAAAByegAAAHK2AAAAsQ8AAHMKAAAAAAEKAQYCCgEUAnoQT3B0aW9uYWwuX19zdHJfXykBVCkJcpsAAABynAAAAHKdAAAAcsMAAAByMQMAAHKtAAAAcuEBAABytgAAAHKBAgAAcnkAAAByeQAAAHJlAgAAcnoAAAByHQAAAHoPAABzCAAAAAgBBCIQBgoOch0AAABjAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAcywAAABlAFoBZABaAmQBWgNkCYcAZgFkBGQFhAlaBGQKZAdkCIQBWgWHAAQAWgZTACkLcioAAABh/wkAAAogICAgVG9rZW4gZm9yIHNraXBwaW5nIG92ZXIgYWxsIHVuZGVmaW5lZCB0ZXh0IHVudGlsIHRoZSBtYXRjaGVkIGV4cHJlc3Npb24gaXMgZm91bmQuCgogICAgUGFyYW1ldGVyczoKICAgICAtIGV4cHIgLSB0YXJnZXQgZXhwcmVzc2lvbiBtYXJraW5nIHRoZSBlbmQgb2YgdGhlIGRhdGEgdG8gYmUgc2tpcHBlZAogICAgIC0gaW5jbHVkZSAtIChkZWZhdWx0PUN7RmFsc2V9KSBpZiBUcnVlLCB0aGUgdGFyZ2V0IGV4cHJlc3Npb24gaXMgYWxzbyBwYXJzZWQgCiAgICAgICAgICAodGhlIHNraXBwZWQgdGV4dCBhbmQgdGFyZ2V0IGV4cHJlc3Npb24gYXJlIHJldHVybmVkIGFzIGEgMi1lbGVtZW50IGxpc3QpLgogICAgIC0gaWdub3JlIC0gKGRlZmF1bHQ9Q3tOb25lfSkgdXNlZCB0byBkZWZpbmUgZ3JhbW1hcnMgKHR5cGljYWxseSBxdW90ZWQgc3RyaW5ncyBhbmQgCiAgICAgICAgICBjb21tZW50cykgdGhhdCBtaWdodCBjb250YWluIGZhbHNlIG1hdGNoZXMgdG8gdGhlIHRhcmdldCBleHByZXNzaW9uCiAgICAgLSBmYWlsT24gLSAoZGVmYXVsdD1De05vbmV9KSBkZWZpbmUgZXhwcmVzc2lvbnMgdGhhdCBhcmUgbm90IGFsbG93ZWQgdG8gYmUgCiAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgc2tpcHBlZCB0ZXN0OyBpZiBmb3VuZCBiZWZvcmUgdGhlIHRhcmdldCBleHByZXNzaW9uIGlzIGZvdW5kLCAKICAgICAgICAgIHRoZSBTa2lwVG8gaXMgbm90IGEgbWF0Y2gKCiAgICBFeGFtcGxlOjoKICAgICAgICByZXBvcnQgPSAnJycKICAgICAgICAgICAgT3V0c3RhbmRpbmcgSXNzdWVzIFJlcG9ydCAtIDEgSmFuIDIwMDAKCiAgICAgICAgICAgICAgICMgfCBTZXZlcml0eSB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIERheXMgT3BlbgogICAgICAgICAgICAtLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KICAgICAgICAgICAgIDEwMSB8IENyaXRpY2FsIHwgSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaCAgICAgICAgICAgICAgICAgfCAgICAgICAgICA2CiAgICAgICAgICAgICAgOTQgfCBDb3NtZXRpYyB8IFNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKSAgICAgICAgIHwgICAgICAgICAxNAogICAgICAgICAgICAgIDc5IHwgTWlub3IgICAgfCBTeXN0ZW0gc2xvdyB3aGVuIHJ1bm5pbmcgdG9vIG1hbnkgcmVwb3J0cyB8ICAgICAgICAgNDcKICAgICAgICAgICAgJycnCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBTRVAgPSBTdXBwcmVzcygnfCcpCiAgICAgICAgIyB1c2UgU2tpcFRvIHRvIHNpbXBseSBtYXRjaCBldmVyeXRoaW5nIHVwIHVudGlsIHRoZSBuZXh0IFNFUAogICAgICAgICMgLSBpZ25vcmUgcXVvdGVkIHN0cmluZ3MsIHNvIHRoYXQgYSAnfCcgY2hhcmFjdGVyIGluc2lkZSBhIHF1b3RlZCBzdHJpbmcgZG9lcyBub3QgbWF0Y2gKICAgICAgICAjIC0gcGFyc2UgYWN0aW9uIHdpbGwgY2FsbCB0b2tlbi5zdHJpcCgpIGZvciBlYWNoIG1hdGNoZWQgdG9rZW4sIGkuZS4sIHRoZSBkZXNjcmlwdGlvbiBib2R5CiAgICAgICAgc3RyaW5nX2RhdGEgPSBTa2lwVG8oU0VQLCBpZ25vcmU9cXVvdGVkU3RyaW5nKQogICAgICAgIHN0cmluZ19kYXRhLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHN0ci5zdHJpcCkpCiAgICAgICAgdGlja2V0X2V4cHIgPSAoaW50ZWdlcigiaXNzdWVfbnVtIikgKyBTRVAgCiAgICAgICAgICAgICAgICAgICAgICArIHN0cmluZ19kYXRhKCJzZXYiKSArIFNFUCAKICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nX2RhdGEoImRlc2MiKSArIFNFUCAKICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlcigiZGF5c19vcGVuIikpCiAgICAgICAgCiAgICAgICAgZm9yIHRrdCBpbiB0aWNrZXRfZXhwci5zZWFyY2hTdHJpbmcocmVwb3J0KToKICAgICAgICAgICAgcHJpbnQgdGt0LmR1bXAoKQogICAgcHJpbnRzOjoKICAgICAgICBbJzEwMScsICdDcml0aWNhbCcsICdJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoJywgJzYnXQogICAgICAgIC0gZGF5c19vcGVuOiA2CiAgICAgICAgLSBkZXNjOiBJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoCiAgICAgICAgLSBpc3N1ZV9udW06IDEwMQogICAgICAgIC0gc2V2OiBDcml0aWNhbAogICAgICAgIFsnOTQnLCAnQ29zbWV0aWMnLCAiU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpIiwgJzE0J10KICAgICAgICAtIGRheXNfb3BlbjogMTQKICAgICAgICAtIGRlc2M6IFNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKQogICAgICAgIC0gaXNzdWVfbnVtOiA5NAogICAgICAgIC0gc2V2OiBDb3NtZXRpYwogICAgICAgIFsnNzknLCAnTWlub3InLCAnU3lzdGVtIHNsb3cgd2hlbiBydW5uaW5nIHRvbyBtYW55IHJlcG9ydHMnLCAnNDcnXQogICAgICAgIC0gZGF5c19vcGVuOiA0NwogICAgICAgIC0gZGVzYzogU3lzdGVtIHNsb3cgd2hl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b3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IGxpZ2h0IGJsdWUgdGV4dHVyZTogYnVybGFwIgogICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKICAgICAgICAKICAgICAgICAjIHByaW50IGF0dHJpYnV0ZXMgYXMgcGxhaW4gZ3JvdXBzCiAgICAgICAgcHJpbnQoT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkuZHVtcCgpKQogICAgICAgIAogICAgICAgICMgaW5zdGVhZCBvZiBPbmVPck1vcmUoZXhwciksIHBhcnNlIHVzaW5nIERpY3QoT25lT3JNb3JlKEdyb3VwKGV4cHIpKSkgLSBEaWN0IHdpbGwgYXV0by1hc3NpZ24gbmFtZXMKICAgICAgICByZXN1bHQgPSBEaWN0KE9uZU9yTW9yZShHcm91cChhdHRyX2V4cHIpKSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIAogICAgICAgICMgYWNjZXNzIG5hbWVkIGZpZWxkcyBhcyBkaWN0IGVudHJpZXMsIG9yIG91dHB1dCBhcyBkaWN0CiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKSAgICAgICAgCiAgICAgICAgcHJpbnQocmVzdWx0LmFzRGljdCgpKQogICAgcHJpbnRzOjoKICAgICAgICBbJ3NoYXBlJywgJ1NRVUFSRScsICdwb3NuJywgJ3VwcGVyIGxlZnQnLCAnY29sb3InLCAnbGlnaHQgYmx1ZScsICd0ZXh0dXJlJywgJ2J1cmxhcCddCgogICAgICAgIFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24nLCAndXBwZXIgbGVmdCddLCBb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EgQAdAJ5MgEAAQABAFkAbgIwAHwBUwApA2F0AwAACiAgICBEZWNvcmF0b3IgZm9yIGRlYnVnZ2luZyBwYXJzZSBhY3Rpb25zLiAKICAgIAogICAgV2hlbiB0aGUgcGFyc2UgYWN0aW9uIGlzIGNhbGxlZCwgdGhpcyBkZWNvcmF0b3Igd2lsbCBwcmludCBDeyI+PiBlbnRlcmluZyBJe21ldGhvZC1uYW1lfShsaW5lOkl7Y3VycmVudF9zb3VyY2VfbGluZX0sIEl7cGFyc2VfbG9jYXRpb259LCBJe21hdGNoZWRfdG9rZW5zfSkiLn0KICAgIFdoZW4gdGhlIHBhcnNlIGFjdGlvbiBjb21wbGV0ZXMsIHRoZSBkZWNvcmF0b3Igd2lsbCBwcmludCBDeyI8PCJ9IGZvbGxvd2VkIGJ5IHRoZSByZXR1cm5lZCB2YWx1ZSwgb3IgYW55IGV4Y2VwdGlvbiB0aGF0IHRoZSBwYXJzZSBhY3Rpb24gcmFpc2VkLgoKICAgIEV4YW1wbGU6OgogICAgICAgIHdkID0gV29yZChhbHBoYXMpCgogICAgICAgIEB0cmFjZVBhcnNlQWN0aW9uCiAgICAgICAgZGVmIHJlbW92ZV9kdXBsaWNhdGVfY2hhcnModG9rZW5zKToKICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4oc29ydGVkKHNldCgnJy5qb2luKHRva2VucykpKSkKCiAgICAgICAgd2RzID0gT25lT3JNb3JlKHdkKS5zZXRQYXJzZUFjdGlvbihyZW1vdmVfZHVwbGljYXRlX2NoYXJzKQogICAgICAgIHByaW50KHdkcy5wYXJzZVN0cmluZygic2xrZGpzIHNsZCBzbGRkIHNkbGYgc2RsamYiKSkKICAgIHByaW50czo6CiAgICAgICAgPj5lbnRlcmluZyByZW1vdmVfZHVwbGljYXRlX2NoYXJzKGxpbmU6ICdzbGtkanMgc2xkIHNsZGQgc2RsZiBzZGxqZicsIDAsIChbJ3Nsa2RqcycsICdzbGQnLCAnc2xkZCcsICdzZGxmJywgJ3NkbGpmJ10sIHt9KSkKICAgICAgICA8PGxlYXZpbmcgcmVtb3ZlX2R1cGxpY2F0ZV9jaGFycyAocmV0OiAnZGZqa2xzJykKICAgICAgICBb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AFkAbgIwAHQShwBmAWQUZA+ECHwFRACDAYMBoBBkEKAOfAWhAaEBUwApFWHbAwAACiAgICBIZWxwZXIgdG8gcXVpY2tseSBkZWZpbmUgYSBzZXQgb2YgYWx0ZXJuYXRpdmUgTGl0ZXJhbHMsIGFuZCBtYWtlcyBzdXJlIHRvIGRvCiAgICBsb25nZXN0LWZpcnN0IHRlc3Rpbmcgd2hlbiB0aGVyZSBpcyBhIGNvbmZsaWN0LCByZWdhcmRsZXNzIG9mIHRoZSBpbnB1dCBvcmRlciwKICAgIGJ1dCByZXR1cm5zIGEgQ3tMe01hdGNoRmlyc3R9fSBmb3IgYmVzdCBwZXJmb3JtYW5jZS4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gc3RycyAtIGEgc3RyaW5nIG9mIHNwYWNlLWRlbGltaXRlZCBsaXRlcmFscywgb3IgYSBjb2xsZWN0aW9uIG9mIHN0cmluZyBsaXRlcmFscwogICAgIC0gY2FzZWxlc3MgLSAoZGVmYXVsdD1De0ZhbHNlfSkgLSB0cmVhdCBhbGwgbGl0ZXJhbHMgYXMgY2FzZWxlc3MKICAgICAtIHVzZVJlZ2V4IC0gKGRlZmF1bHQ9Q3tUcnVlfSkgLSBhcyBhbiBvcHRpbWl6YXRpb24sIHdpbGwgZ2VuZXJhdGUgYSBSZWdleAogICAgICAgICAgb2JqZWN0OyBvdGhlcndpc2UsIHdpbGwgZ2VuZXJhdGUgYSBDe01hdGNoRmlyc3R9IG9iamVjdCAoaWYgQ3tjYXNlbGVzcz1UcnVlfSwgb3IKICAgICAgICAgIGlmIGNyZWF0aW5nIGEgQ3tSZWdleH0gcmFpc2VzIGFuIGV4Y2VwdGlvbikKCiAgICBFeGFtcGxlOjoKICAgICAgICBjb21wX29wZXIgPSBvbmVPZigiPCA9ID4gPD0gPj0gIT0iKQogICAgICAgIHZhciA9IFdvcmQoYWxwaGFzKQogICAgICAgIG51bWJlciA9IFdvcmQobnVtcykKICAgICAgICB0ZXJtID0gdmFyIHwgbnVtYmVyCiAgICAgICAgY29tcGFyaXNvbl9leHByID0gdGVybSArIGNvbXBfb3BlciArIHRlcm0KICAgICAgICBwcmludChjb21wYXJpc29uX2V4cHIuc2VhcmNoU3Ry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c3VsdHMgY2FuIGluY2x1ZGUgbmFtZWQgdG9rZW4KICAgIGZpZWxkcy4KCiAgICBFeGFtcGxlOjoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogbGlnaHQgYmx1ZSB0ZXh0dXJlOiBidXJsYXAiCiAgICAgICAgYXR0cl9leHByID0gKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKICAgICAgICAKICAgICAgICBhdHRyX2xhYmVsID0gbGFiZWwKICAgICAgICBhdHRyX3ZhbHVlID0gU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pCgogICAgICAgICMgc2ltaWxhciB0byBEaWN0LCBidXQgc2ltcGxlciBjYWxsIGZvcm1hdAogICAgICAgIHJlc3VsdCA9IGRpY3RPZihhdHRyX2xhYmVsLCBhdHRyX3ZhbHVlKS5wYXJzZVN0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKQogICAgICAgIHByaW50KHJlc3VsdC5zaGFwZSkgICMgb2JqZWN0IGF0dHJpYnV0ZSBhY2Nlc3Mgd29ya3MgdG9vCiAgICAgICAgcHJpbnQocmVzdWx0LmFzRGljdCgpKQogICAgcHJpbnRzOjoKICAgICAgICBbWydzaGFwZScsICdTUVVBUkUnXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXSwgWydjb2xvcicsICdsaWdodCBibHVlJ10sIFsndGV4dHVyZScsICdidXJsYXAnXV0KICAgICAgICAtIGNvbG9yOiBsaWdodCBibHVlCiAgICAgICAgLSBwb3NuOiB1cHBlciBsZWZ0CiAgICAgICAgLSBzaGFwZTog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ciB1bnF1b3RlZCB2YWx1ZXMuCgogICAgRXhhbXBsZTo6CiAgICAgICAgdGV4dCA9ICc8dGQ+TW9yZSBpbmZvIGF0IHRoZSA8YSBocmVmPSJodHRwOi8vcHlwYXJzaW5nLndpa2lzcGFjZXMuY29tIj5weXBhcnNpbmc8L2E+IHdpa2kgcGFnZTwvdGQ+JwogICAgICAgICMgbWFrZUhUTUxUYWdzIHJldHVybnMgcHlwYXJzaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyB0YWdzIGFzIGEgMi10dXBsZQogICAgICAgIGEsYV9lbmQgPSBtYWtlSFRNTFRhZ3MoIkEiKQogICAgICAgIGxpbmtfZXhwciA9IGEgKyBTa2lwVG8oYV9lbmQpKCJsaW5rX3RleHQiKSArIGFfZW5kCiAgICAgICAgCiAgICAgICAgZm9yIGxpbmsgaW4gbGlua19leHByLnNlYXJjaFN0cmluZyh0ZXh0KToKICAgICAgICAgICAgIyBhdHRyaWJ1dGVzIGluIHRoZSA8QT4gdGFnIChsaWtlICJocmVmIiBzaG93biBoZXJlKSBhcmUgYWxzbyBhY2Nlc3NpYmxlIGFzIG5hbWVkIHJlc3VsdHMKICAgICAgICAgICAgcHJpbnQobGluay5saW5rX3RleHQsICctPicsIGxpbmsuaHJlZikKICAgIHByaW50czo6CiAgICAgICAgcHlwYXJzaW5nIC0+IGh0dHA6Ly9weXBhcnNpbmcud2lraXNwYWNlcy5jb20KICAgIEapAXKnAwAAqQFyoAMAAHJ5AAAAcnkAAAByegAAAHJNAAAAKBMAAHMCAAAAABFyTQAAAGMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAABzCgAAAHQAfABkAYMCUwApAnq6CiAgICBIZWxwZXIgdG8gY29uc3RydWN0IG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFnIGV4cHJlc3Npb25zIGZvciBYTUwsIGdpdmVuIGEgdGFnIG5hbWUuIE1hdGNoZXMKICAgIHRhZ3Mgb25seSBpbiB0aGUgZ2l2ZW4gdXBwZXIvbG93ZXIgY2FzZS4KCiAgICBFeGFtcGxlOiBzaW1pbGFyIHRvIEx7bWFrZUhUTUxUYWdzfQogICAgVHKoAwAAcqkDAAByeQAAAHJ5AAAAcnoAAAByTgAAADsTAABzAgAAAAAHck4AAABjAAAAAAAAAAAAAAAAAwAAAAMAAAAPAAAAczgAAAB8AHISfABkAWQBhQIZAIkAbgh8AaAAoQCJAGQCZAOEAIgARACDAYkAhwBmAWQEZAWECH0CfAJTACkGYTwIAAAKICAgIEhlbHBlciB0byBjcmVhdGUgYSB2YWxpZGF0aW5nIHBhcnNlIGFjdGlvbiB0byBiZSB1c2VkIHdpdGggc3RhcnQgdGFncyBjcmVhdGVkCiAgICB3aXRoIEN7THttYWtlWE1MVGFnc319IG9yIEN7THttYWtlSFRNTFRhZ3N9fS4gVXNlIEN7d2l0aEF0dHJpYnV0ZX0gdG8gcXVhbGlmeSBhIHN0YXJ0aW5nIHRhZwogICAgd2l0aCBhIHJlcXVpcmVkIGF0dHJpYnV0ZSB2YWx1ZSwgdG8gYXZvaWQgZmFsc2UgbWF0Y2hlcyBvbiBjb21tb24gdGFncyBzdWNoIGFzCiAgICBDezxURD59IG9yIEN7PERJVj59LgoKICAgIENhbGwgQ3t3aXRoQXR0cmlidXRlfSB3aXRoIGEgc2VyaWVzIG9mIGF0dHJpYnV0ZSBuYW1lcyBhbmQgdmFsdWVzLiBTcGVjaWZ5IHRoZSBsaXN0CiAgICBvZiBmaWx0ZXIgYXR0cmlidXRlcyBuYW1lcyBhbmQgdmFsdWVzIGFzOgogICAgIC0ga2V5d29yZCBhcmd1bWVudHMsIGFzIGluIEN7KGFsaWduPSJyaWdodCIpfSwgb3IKICAgICAtIGFzIGFuIGV4cGxpY2l0IGRpY3Qgd2l0aCBDeyoqfSBvcGVyYXRvciwgd2hlbiBhbiBhdHRyaWJ1dGUgbmFtZSBpcyBhbHNvIGEgUHl0aG9uCiAgICAgICAgICByZXNlcnZlZCB3b3JkLCBhcyBpbiBDeyoqeyJjbGFzcyI6IkN1c3RvbWVyIiwgImFsaWduIjoicmlnaHQifX0KICAgICAtIGEgbGlzdCBvZiBuYW1lLXZhbHVlIHR1cGxlcywgYXMgaW4gKCAoIm5zMTpjbGFzcyIsICJDdXN0b21lciIpLCAoIm5zMjphbGlnbiIsInJpZ2h0IikgKQogICAgRm9yIGF0dHJpYnV0ZSBuYW1lcyB3aXRoIGEgbmFtZXNwYWNlIHByZWZpeCwgeW91IG11c3QgdXNlIHRoZSBzZWNvbmQgZm9ybS4gIEF0dHJpYnV0ZQogICAgbmFtZXMgYXJlIG1hdGNoZWQgaW5zZW5zaXRpdmUgdG8gdXBwZXIvbG93ZXIgY2FzZS4KICAgICAgIAogICAgSWYganVzdCB0ZXN0aW5nIGZvciBDe2NsYXNzfSAod2l0aCBvciB3aXRob3V0IGEgbmFtZXNwYWNlKSwgdXNlIEN7THt3aXRoQ2xhc3N9fS4KCiAgICBUbyB2ZXJpZnkgdGhhdCB0aGUgYXR0cmlidXRlIGV4aXN0cywgYnV0IHdpdGhvdXQgc3BlY2lmeWluZyBhIHZhbHVlLCBwYXNzCiAgICBDe3dpdGhBdHRyaWJ1dGUuQU5ZX1ZBTFVFfSBhcyB0aGUgdmFsdWUuCgogICAgRXhhbXBsZTo6CiAgICAgICAgaHRtbCA9ICcnJwogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICBTb21lIHRleHQKICAgICAgICAgICAgPGRpdiB0eXBlPSJncmlkIj4xIDQgMCAxIDA8L2Rpdj4KICAgICAgICAgICAgPGRpdiB0eXBlPSJncmFwaCI+MSwzIDIsMyAxLDE8L2Rpdj4KICAgICAgICAgICAgPGRpdj50aGlzIGhhcyBubyB0eXBlPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgJycnCiAgICAgICAgZGl2LGRpdl9lbmQgPSBtYWtlSFRNTFRhZ3MoImRpdiIpCgogICAgICAgICMgb25seSBtYXRjaCBkaXYgdGFnIGhhdmluZyBhIHR5cGUgYXR0cmlidXRlIHdpdGggdmFsdWUgImdyaWQiCiAgICAgICAgZGl2X2dyaWQgPSBkaXYoKS5zZXRQYXJzZUFjdGlvbih3aXRoQXR0cmlidXRlKHR5cGU9ImdyaWQiKSkKICAgICAgICBncmlkX2V4cHIgPSBkaXZfZ3JpZCArIFNraXBUbyhkaXYgfCBkaXZfZW5kKSgiYm9keSIpCiAgICAgICAgZm9yIGdyaWRfaGVhZGVyIGluIGdyaWRfZXhwci5zZWFyY2hTdHJpbmcoaHRtbCk6CiAgICAgICAg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AnI4dAd8BXwNFwB8DxcAfA4XAHwPFwCDAXQIfAV8DRcAfA8XAHwOFwB8DxcAgwEXAH0Qbgh0A2QKgwGCAW4IdANkC4MBggF8C5ACcnZ0C3wLdA50D2YCgwKQAnJsfBBqEHwLjgABAG4KfBCgEHwLoQEBAHwPfBCgBHwMoQF8BUIASwB9D3wPfQVxHnwEfAVLAH0EfARTACkMYUQKAAAKICAgIEhlbHBlciBtZXRob2QgZm9yIGNvbnN0cnVjdGluZyBncmFtbWFycyBvZiBleHByZXNzaW9ucyBtYWRlIHVwIG9mCiAgICBvcGVyYXRvcnMgd29ya2luZyBpbiBhIHByZWNlZGVuY2UgaGllcmFyY2h5LiAgT3BlcmF0b3JzIG1heSBiZSB1bmFyeSBvcgogICAgYmluYXJ5LCBsZWZ0LSBvciByaWdodC1hc3NvY2lhdGl2ZS4gIFBhcnNlIGFjdGlvbnMgY2FuIGFsc28gYmUgYXR0YWNoZWQKICAgIHRvIG9wZXJhdG9yIGV4cHJlc3Npb25zLiBUaGUgZ2VuZXJhdGVkIHBhcnNlciB3aWxsIGFsc28gcmVjb2duaXplIHRoZSB1c2UgCiAgICBvZiBwYXJlbnRoZXNlcyB0byBvdmVycmlkZSBvcGVyYXRvciBwcmVjZWRlbmNlcyAoc2VlIGV4YW1wbGUgYmVsb3cpLgogICAgCiAgICBOb3RlOiBpZiB5b3UgZGVmaW5lIGEgZGVlcCBvcGVyYXRvciBsaXN0LCB5b3UgbWF5IHNlZSBwZXJmb3JtYW5jZSBpc3N1ZXMKICAgIHdoZW4gdXNpbmcgaW5maXhOb3RhdGlvbi4gU2VlIEx7UGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0fSBmb3IgYQogICAgbWVjaGFuaXNtIHRvIHBvdGVudGlhbGx5IGltcHJvdmUgeW91ciBwYXJzZXIgcGVyZm9ybWFuY2UuCgogICAgUGFyYW1ldGVyczoKICAgICAtIGJhc2VFeHByIC0gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIG1vc3QgYmFzaWMgZWxlbWVudCBmb3IgdGhlIG5lc3RlZAogICAgIC0gb3BMaXN0IC0gbGlzdCBvZiB0dXBsZXMsIG9uZSBmb3IgZWFjaCBvcGVyYXRvciBwcmVjZWRlbmNlIGxldmVsIGluIHRoZQogICAgICBleHByZXNzaW9uIGdyYW1tYXI7IGVhY2ggdHVwbGUgaXMgb2YgdGhlIGZvcm0KICAgICAgKG9wRXhwciwgbnVtVGVybXMsIHJpZ2h0TGVmdEFzc29jLCBwYXJzZUFjdGlvbiksIHdoZXJlOgogICAgICAgLSBvcEV4cHIgaXMgdGhlIHB5cGFyc2luZyBleHByZXNzaW9uIGZvciB0aGUgb3BlcmF0b3I7CiAgICAgICAgICBtYXkgYWxzbyBiZSBhIHN0cmluZywgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBMaXRlcmFsOwogICAgICAgICAgaWYgbnVtVGVybXMgaXMgMywgb3BFeHByIGlzIGEgdHVwbGUgb2YgdHdvIGV4cHJlc3Npb25zLCBmb3IgdGhlCiAgICAgICAgICB0d28gb3BlcmF0b3JzIHNlcGFyYXRpbmcgdGhlIDMgdGVybXMKICAgICAgIC0gbnVtVGVybXMgaXMgdGhlIG51bWJlciBvZiB0ZXJtcyBmb3IgdGhpcyBvcGVyYXRvciAobXVzdAogICAgICAgICAgYmUgMSwgMiwgb3IgMykKICAgICAgIC0gcmlnaHRMZWZ0QXNzb2MgaXMgdGhlIGluZGljYXRvciB3aGV0aGVyIHRoZSBvcGVyYXRvciBpcwogICAgICAgICAgcmlnaHQgb3IgbGVmdCBhc3NvY2lhdGl2ZSwgdXNpbmcgdGhlIHB5cGFyc2luZy1kZWZpbmVkCiAgICAgICAgICBjb25zdGFudHMgQ3tvcEFzc29jLlJJR0hUfSBhbmQgQ3tvcEFzc29jLkxFRlR9LgogICAgICAgLSBwYXJzZUFjdGlvbiBpcyB0aGUgcGFyc2UgYWN0aW9uIHRvIGJlIGFzc29jaWF0ZWQgd2l0aAogICAgICAgICAgZXhwcmVzc2lvbnMgbWF0Y2hpbmcgdGhpcyBvcGVyYXRvciBleHByZXNzaW9uICh0aGUKICAgICAgICAgIHBhcnNlIGFjdGlvbiB0dXBsZSBtZW1iZXIgbWF5IGJlIG9taXR0ZWQpOyBpZiB0aGUgcGFyc2UgYWN0aW9uCiAgICAgICAgICBpcyBwYXNzZWQgYSB0dXBsZSBvciBsaXN0IG9mIGZ1bmN0aW9ucywgdGhpcyBpcyBlcXVpdmFsZW50IHRvCiAgICAgICAgICBjYWxsaW5nIEN7c2V0UGFyc2VBY3Rpb24oKmZuKX0gKEx7UGFyc2VyRWxlbWVudC5zZXRQYXJzZUFjdGlvbn0pCiAgICAgLSBscGFyIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgbGVmdC1wYXJlbnRoZXNlcyAoZGVmYXVsdD1De1N1cHByZXNzKCcoJyl9KQogICAgIC0gcnBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIHJpZ2h0LXBhcmVudGhlc2VzIChkZWZhdWx0PUN7U3VwcHJlc3MoJyknKX0pCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyBzaW1wbGUgZXhhbXBsZSBvZiBmb3VyLWZ1bmN0aW9uIGFyaXRobWV0aWMgd2l0aCBpbnRzIGFuZCB2YXJpYWJsZSBuYW1lcwogICAgICAgIGludGVnZXIgPSBweXBhcnNpbmdfY29tbW9uLnNpZ25lZF9pbnRlZ2VyCiAgICAgICAgdmFybmFtZSA9IHB5cGFyc2luZ19jb21tb24uaWRlbnRpZmllciAKICAgICAgICAKICAgICAgICBhcml0aF9leHByID0gaW5maXhOb3RhdGlvbihpbnRlZ2VyIHwgdmFybmFtZSwKICAgICAgICAgICAgWwogICAgICAgICAgICAoJy0nLCAxLCBvcEFzc29jLlJJR0hUKSwKICAgICAgICAgICAgKG9uZU9mKCcqIC8nKSwgMiwgb3BBc3NvYy5MRUZUKSwKICAgICAgICAgICAgKG9uZU9mKCcrIC0nKSwgMiwgb3BBc3NvYy5MRUZUKSwKICAgICAgICAgICAgXSkKICAgICAgICAKICAgICAgICBhcml0aF9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICA1KzMqNgogICAgICAgICAgICAoNSszKSo2CiAgICAgICAgICAgIC0yLS0xMQogICAgICAgICAgICAnJycsIGZ1bGxEdW1wPUZhbHNlKQogICAgcHJpbnRzOjoKICAgICAgICA1KzMqNgogICAgICAgIFtbNSwgJysnLCBbMywgJyonLCA2XV1dCgogICAgICAgICg1KzMpKjYKICAg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IGlnbm9yZUV4cHIgLSBleHByZXNzaW9uIGZvciBpZ25vcmluZyBvcGVuaW5nIGFuZCBjbG9zaW5nIGRlbGltaXRlcnMgKGRlZmF1bHQ9Q3txdW90ZWRTdHJpbmd9KQoKICAgIElmIGFuIGV4cHJlc3Npb24gaXMgbm90IHByb3ZpZGVkIGZvciB0aGUgY29udGVudCBhcmd1bWVudCwgdGhlIG5lc3RlZAogICAgZXhwcmVzc2lvbiB3aWxsIGNhcHR1cmUgYWxsIHdoaXRlc3BhY2UtZGVsaW1pdGVkIGNvbnRlbnQgYmV0d2VlbiBkZWxpbWl0ZXJzCiAgICBhcyBhIGxpc3Qgb2Ygc2VwYXJhdGUgdmFsdWVzLgoKICAgIFVzZSB0aGUgQ3tpZ25vcmVFeHByfSBhcmd1bWVudCB0byBkZWZpbmUgZXhwcmVzc2lvbnMgdGhhdCBtYXkgY29udGFpbgogICAgb3BlbmluZyBvciBjbG9zaW5nIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgb3BlbmluZwogICAgb3IgY2xvc2luZyBjaGFyYWN0ZXJzIGZvciBuZXN0aW5nLCBzdWNoIGFzIHF1b3RlZFN0cmluZyBvciBhIGNvbW1lbnQKICAgIGV4cHJlc3Npb24uICBTcGVjaWZ5IG11bHRpcGxlIGV4cHJlc3Npb25zIHVzaW5nIGFuIEN7THtPcn19IG9yIEN7THtNYXRjaEZpcnN0fX0uCiAgICBUaGUgZGVmYXVsdCBpcyBMe3F1b3RlZFN0cmluZ30sIGJ1dCBpZiBubyBleHByZXNzaW9ucyBhcmUgdG8gYmUgaWdub3JlZCwKICAgIHRoZW4gcGFzcyBDe05vbmV9IGZvciB0aGlzIGFyZ3VtZW50LgoKICAgIEV4YW1wbGU6OgogICAgICAgIGRhdGFfdHlwZSA9IG9uZU9mKCJ2b2lkIGludCBzaG9ydCBsb25nIGNoYXIgZmxvYXQgZG91YmxlIikKICAgICAgICBkZWNsX2RhdGFfdHlwZSA9IENvbWJpbmUoZGF0YV90eXBlICsgT3B0aW9uYWwoV29yZCgnKicpKSkKICAgICAgICBpZGVudCA9IFdvcmQoYWxwaGFzKydfJywgYWxwaGFudW1zKydfJykKICAgICAgICBudW1iZXIgPSBweXBhcnNpbmdfY29tbW9uLm51bWJlcgogICAgICAgIGFyZyA9IEdyb3VwKGRlY2xfZGF0YV90eXBlICsgaWRlbnQpCiAgICAgICAgTFBBUixSUEFSID0gbWFwKFN1cHByZXNzLCAiKCkiKQoKICAgICAgICBjb2RlX2JvZHkgPSBuZXN0ZWRFeHByKCd7JywgJ30nLCBpZ25vcmVFeHByPShxdW90ZWRTdHJpbmcgfCBjU3R5bGVDb21tZW50KSkKCiAgICAgICAgY19mdW5jdGlvbiA9IChkZWNsX2RhdGFfdHlwZSgidHlwZSIpIAogICAgICAgICAgICAgICAgICAgICAgKyBpZGVudCgibmFtZSIpCiAgICAgICAgICAgICAgICAgICAgICArIExQQVIgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KGFyZyksIFtdKSgiYXJncyIpICsgUlBBUiAKICAgICAgICAgICAgICAgICAgICAgICsgY29kZV9ib2R5KCJib2R5IikpCiAgICAgICAgY19mdW5jdGlvbi5pZ25vcmUoY1N0eWxlQ29tbWVudCkKICAgICAgICAKICAgICAgICBzb3VyY2VfY29kZSA9ICcnJwogICAgICAgICAgICBpbnQgaXNfb2RkKGludCB4KSB7IAogICAgICAgICAgICAgICAgcmV0dXJuICh4JTIpOyAKICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGludCBkZWNfdG9faGV4KGNoYXIgaGNoYXIpIHsgCiAgICAgICAgICAgICAgICBpZiAoaGNoYXIgPj0gJzAnICYmIGhjaGFyIDw9ICc5JykgeyAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9yZChoY2hhciktb3JkKCcwJykpOyAKICAgICAgICAgICAgICAgIH0gZWxzZSB7IAogICAgICAgICAgICAgICAgICAgIHJldHVybiAoMTArb3JkKGhjaGFyKS1vcmQoJ0EnKSk7CiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9CiAgICAgICAgJycnCiAgICAgICAgZm9yIGZ1bmMgaW4gY19mdW5jdGlvbi5zZWFyY2hTdHJpbmcoc291cmNlX2NvZGUpOgogICAgICAgICAgICBwcmludCgiJShuYW1lKXMgKCUodHlwZSlzKSBhcmdzOiAlKGFyZ3MpcyIgJSBmdW5jKQoKICAgIHByaW50czo6CiAgICAgICAgaXNfb2RkIChpbnQpIGFyZ3M6IFtbJ2ludCcsICd4J11dCiAgICAgICAgZGVjX3RvX2hleCAoaW50KSBhcmdzOiBbWydjaGFyJywgJ2hjaGFyJ11dCiAgICB6Lm9wZW5pbmcgYW5kIGNsb3Npbmcgc3RyaW5ncyBjYW5ub3QgYmUgdGhlIHNhbWVOco0AAAByggMAAGMBAAAAAAAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAKAAoQBTAHLSAAAAqQFyuwAAAHJ3AAAAcnkAAAByeQAAAHJ6AAAAcnsAAABnFAAAcnwAAAB6HG5lc3RlZEV4cHIuPGxvY2Fscz4uPGxhbWJkYT5jAQAAAAAAAAAAAAAAAQAAAAIAAABTAAAAcwwAAAB8AGQBGQCgAKEAUwBy0gAAAHLHAwAAcncAAAByeQAAAHJ5AAAAcnoAAAByewAAAGoUAAByfAAAAGMBAAAAAAAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAKAAoQBTAHLSAAAAcscDAABydwAAAHJ5AAAAcnkAAAByegAAAHJ7AAAAcBQAAHJ8AAAAYwEAAAAAAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAoAChAFMActIAAAByxwMAAHJ3AAAAcnkAAAByeQAAAHJ6AAAAcnsAAAB0FAAAcnwAAAB6T29wZW5pbmcgYW5kIGNsb3NpbmcgYXJndW1lbnRzIG11c3QgYmUgc3RyaW5ncyBpZiBubyBjb250ZW50IGV4cHJlc3Npb24gaXMgZ2l2ZW56Fm5lc3RlZCAlcyVzIGV4cHJlc3Npb24pEnJAAgAAcn0AAABy6AAAAHL4AAAAcgwAAAByGwAAAHILAAAAciYAAABynAEAAHKEAAAAckUAAABy6QAAAHIXAAAAchEAAAByEwAAAHItAAAAcjQAAAByugEAACkF2gZvcGVuZXLaBmNsb3NlctoHY29udGVudHIyAwAAcocAAAByeQAAAHJ5AAAAcnoAAAByUgAAACUUAABzSAAAAAA6CAEIAQoBGAEYAQgBCAEU/wgCBv4GBBgBBv8IAwgBCAEI/wIBCP8CAgz+CAMG/QYFFgEM/wgCBv4GBAgBBgEKASoCJAESAXJSAAAAYwMAAAAAAAAAAAAAAAsAAAAGAAAAAwAAAHPkAAAAhwBmAWQBZAKECH0DhwBmAWQDZASECH0EhwBmAWQFZAaECH0FdAB0AYMAoAJkB6EBoAOhAIMBfQZ0BIMAdASDAKAFfAShARcAoAZkCKEBfQd0BIMAoAV8A6EBoAZkCaEBfQh0BIMAoAV8BaEBoAZkCqEBfQl8AnKmdAd0CHwGgwF8BxcAdAB8CHQHfACDARcAdAh8BoMBFwCDARcAfAkXAIMBfQpuJHQHdAh8BoMBdAB8CHQHfACDARcAdAh8BoMBFwCDARcAgwF9CnwAoAl0CnQBgwAXAKEBAQB8CqAGZAuhAVMAKQxhCgkAAAogICAgSGVscGVyIG1ldGhvZCBmb3IgZGVmaW5pbmcgc3BhY2UtZGVsaW1pdGVkIGluZGVudGF0aW9uIGJsb2Nrcywgc3VjaCBhcwogICAgdGhvc2UgdXNlZCB0byBkZWZpbmUgYmxvY2sgc3RhdGVtZW50cyBpbiBQeXRob24gc291cmNlIGNvZGUuCgogICAgUGFyYW1ldGVyczoKICAgICAtIGJsb2NrU3RhdGVtZW50RXhwciAtIGV4cHJlc3Npb24gZGVmaW5pbmcgc3ludGF4IG9mIHN0YXRlbWVudCB0aGF0CiAgICAgICAgICAgIGlzIHJlcGVhdGVkIHdpdGhpbiB0aGUgaW5kZW50ZWQgYmxvY2sKICAgICAtIGluZGVudFN0YWNrIC0gbGlzdCBjcmVhdGVkIGJ5IGNhbGxlciB0byBtYW5hZ2UgaW5kZW50YXRpb24gc3RhY2sKICAgICAgICAgICAgKG11bHRpcGxlIHN0YXRlbWVudFdpdGhJbmRlbnRlZEJsb2NrIGV4cHJlc3Npb25zIHdpdGhpbiBhIHNpbmdsZSBncmFtbWFyCiAgICAgICAgICAgIHNob3VsZCBzaGFyZSBhIGNvbW1vbiBpbmRlbnRTdGFjaykKICAgICAtIGluZGVudCAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGJsb2NrIG11c3QgYmUgaW5kZW50ZWQgYmV5b25kIHRoZQogICAgICAgICAgICB0aGUgY3VycmVudCBsZXZlbDsgc2V0IHRvIEZhbHNlIGZvciBibG9jayBvZiBsZWZ0LW1vc3Qgc3RhdGVtZW50cwogICAgICAgICAgICAoZGVmYXVsdD1De1RydWV9KQoKICAgIEEgdmFsaWQgYmxvY2sgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBDe2Jsb2NrU3RhdGVtZW50fS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhID0gJycnCiAgICAgICAgZGVmIEEoeik6CiAgICAgICAgICBBMQogICAgICAgICAgQiA9IDEwMAogICAgICAgICAgRyA9IEEyCiAgICAgICAgICBBMgogICAgICAgICAgQTMKICAgICAgICBCCiAgICAgICAgZGVmIEJCKGEsYixjKToKICAgICAgICAgIEJCMQogICAgICAgICAgZGVmIEJCQSgpOgogICAgICAgICAgICBiYmExCiAgICAgICAgICAgIGJiYTIKICAgICAgICAgICAgYmJhMwogICAgICAgIEMKICAgICAgICBECiAgICAgICAgZGVmIHNwYW0oeCx5KToKICAgICAgICAgICAgIGRlZiBlZ2dzKHopOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAnJycKCgogICAgICAgIGluZGVudFN0YWNrID0gWzFdCiAgICAgICAgc3RtdCA9IEZvcndhcmQoKQoKICAgICAgICBpZGVudGlmaWVyID0gV29yZChhbHBoYXMsIGFscGhhbnVtcykKICAgICAgICBmdW5jRGVjbCA9ICgiZGVmIiArIGlkZW50aWZpZXIgKyBHcm91cCggIigiICsgT3B0aW9uYWwoIGRlbGltaXRlZExpc3QoaWRlbnRpZmllcikgKSArICIpIiApICsgIjoiKQogICAgICAgIGZ1bmNfYm9keSA9IGluZGVudGVkQmxvY2soc3RtdCwgaW5kZW50U3RhY2spCiAgICAgICAgZnVuY0RlZiA9IEdyb3VwKCBmdW5jRGVjbCArIGZ1bmNfYm9keSApCgogICAgICAgIHJ2YWx1ZSA9IEZvcndhcmQoKQogICAgICAgIGZ1bmNDYWxsID0gR3JvdXAoaWRlbnRpZmllciArICIoIiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QocnZhbHVlKSkgKyAiKSIpCiAgICAgICAgcnZhbHVlIDw8IChmdW5jQ2FsbCB8IGlkZW50aWZpZXIgfCBXb3JkKG51bXMpKQogICAgICAgIGFzc2lnbm1lbnQgPSBHcm91cChpZGVudGlmaWVyICsgIj0iICsgcnZhbHVlKQogICAgICAgIHN0bXQgPDwgKCBmdW5jRGVmIHwgYXNzaWdubWVudCB8IGlkZW50aWZpZXIgKQoKICAgICAgICBtb2R1bGVfYm9keSA9IE9uZU9yTW9yZShzdG10KQoKICAgICAgICBwYXJzZVRyZWUgPSBtb2R1bGVfYm9keS5wYXJzZVN0cmluZyhkYXRhKQogICAgICAgIHBhcnNlVHJlZS5wcHJpbnQoKQogICAgcHJpbnRzOjoKICAgICAgICBbWydkZWYnLAogICAgICAgICAgJ0EnLAogICAgICAgICAgWycoJywgJ3onLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1snQTEnXSwgW1snQicsICc9JywgJzEwMCddXSwgW1snRycsICc9JywgJ0EyJ11dLCBbJ0EyJ10sIFsnQTMnXV1dLAogICAgICAgICAnQicsCiAgICAgICAgIFsnZGVmJywKICAgICAgICAgICdCQicsCiAgICAgICAgICBbJygnLCAnYScsICdiJywgJ2MnLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1snQkIxJ10sIFtbJ2RlZicsICdCQkEnLCBbJygnLCAnKSddLCAnOicsIFtbJ2JiYTEnXSwgWydiYmEyJ10sIFsnYmJhMyddXV1dXV0sCiAgICAgICAgICdDJywKICAgICAgICAgJ0QnLAogICAgICAgICBbJ2RlZicsCiAgICAgICAgICAnc3BhbScsCiAgICAgICAgICBbJygnLCAneCcsICd5JywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbWydkZWYnLCAnZWdncycsIFsnKCcsICd6JywgJyknXSwgJzonLCBbWydwYXNzJ11dXV1dXV0gCiAgICBjAwAAAAAAAAAAAAAABAAAAAQAAAATAAAAc04AAAB8AXQAfACDAWsFchBkAFMAdAF8AXwA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ZCBsaXN0PGNvbW1hX3NlcGFyYXRlZF9saXN0Pn0KICAgIFBhcnNlIGFjdGlvbnM6CiAgICAgLSBDe0x7Y29udmVydFRvSW50ZWdlcn19CiAgICAgLSBDe0x7Y29udmVydFRvRmxvYXR9fQogICAgIC0gQ3tMe2NvbnZlcnRUb0RhdGV9fQogICAgIC0gQ3tMe2NvbnZlcnRUb0RhdGV0aW1lfX0KICAgICAtIEN7THtzdHJpcEhUTUxUYWdzfX0KICAgICAtIEN7THt1cGNhc2VUb2tlbnN9fQogICAgIC0gQ3tMe2Rvd25jYXNlVG9rZW5zfX0KCiAgICBFeGFtcGxlOjoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLm51bWJlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgdHlwZQogICAgICAgICAgICAxMDAKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICArMTAwCiAgICAgICAgICAgIDMuMTQxNTkKICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uZm51bWJlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyBmbG9hdAogICAgICAgICAgICAxMDAKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICArMTAwCiAgICAgICAgICAgIDMuMTQxNTkKICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uaGV4X2ludGVnZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgaGV4IG51bWJlcnMKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIEZGCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5mcmFjdGlvbi5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAgICAgMS8yCiAgICAgICAgICAgIC0zLzQKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLm1peGVkX2ludGVnZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgbWl4ZWQgZnJhY3Rpb25zCiAgICAgICAgICAgIDEKICAgICAgICAgICAgMS8yCiAgICAgICAgICAgIC0zLzQKICAgICAgICAgICAgMS0zLzQKICAgICAgICAgICAgJycnKQoKICAgICAgICBpbXBvcnQgdXVpZAogICAgICAgIHB5cGFyc2luZ19jb21tb24udXVpZC5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcCh1dWlkLlVVSUQpKQogICAgICAgIHB5cGFyc2luZ19jb21tb24udXVpZC5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyB1dWlkCiAgICAgICAgICAgIDEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OAogICAgICAgICAgICAnJycpCiAgICBwcmludHM6OgogICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAzLjE0MTU5CiAgICAgICAgWzMuMTQxNTldCgogICAgICAgIDYuMDJlMjMKICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgIDFlLTEyCiAgICAgICAgWzFlLTEyXQoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgMTAwCiAgICAgICAgWzEwMC4wXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDAuMF0KCiAgICAgICAgKzEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoK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LCBhbmQgbWl4ZWQgY2FzZSBTRUxFQ1Qga2V5d29yZAogICAgICAgIFNlbGVjdCBBQSxCQixDQyBmcm9tIFN5cy5kdWFsCgogICAgICAgICMgbXVsdGlwbGUgdGFibGVzCiAgICAgICAgU2VsZWN0IEEsIEIsIEMgZnJvbSBTeXMuZHVhbCwgVGFibGUyCgogICAgICAgICMgaW52YWxpZCBTRUxFQ1Qga2V5d29yZCAtIHNob3VsZCBmYWlsCiAgICAgICAgWGVsZWN0IEEsIEIsIEMgZnJvbSBTeXMuZHVhbAoKICAgICAgICAjIGluY29tcGxldGUgY29tbWFuZCAtIHNob3VsZCBmYWlsCiAgICAgICAgU2VsZWN0CgogICAgICAgICMgaW52YWxpZCBjb2x1bW4gbmFtZSAtIHNob3VsZCBmYWlsCiAgICAgICAgU2VsZWN0IF5eXiBmcm94IFN5cy5kdWFsCgogICAgICAgIHpdCiAgICAgICAgMTAwCiAgICAgICAgLTEwMAogICAgICAgICsxMDAKICAgICAgICAzLjE0MTU5CiAgICAgICAgNi4wMmUyMwogICAgICAgIDFlLTEyCiAgICAgICAgeiAKICAgICAgICAxMDAKICAgICAgICBGRgogICAgICAgIHo2CiAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgKQFycwAAACkCclMDAABGKQFOKQJGVCkBVCkBcqAAAAApAVQp43LDAAAA2gtfX3ZlcnNpb25fX9oPX192ZXJzaW9uVGltZV9f2gpfX2F1dGhvcl9fcqEAAADaB3dlYWtyZWZyAgAAAHLzAAAAcukAAAByggAAAHI0AgAAcrMBAAByvgIAAHIMAgAAcmYBAAByhwEAAHL6AQAAcgMAAADaB190aHJlYWRyBAAAANoLSW1wb3J0RXJyb3LaCXRocmVhZGluZ9oPY29sbGVjdGlvbnMuYWJjcgUAAAByBgAAAHIHAAAAcgYCAABaC29yZGVyZWRkaWN02gdfX2FsbF9fcj8CAADaDHZlcnNpb25faW5mb3KGAQAAckUBAADaB21heHNpemVygAIAAHJ/AAAAcugAAADaA2NocnKEAwAAcogAAAByEwMAAHL4AAAAcmABAADaCHJl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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 3
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
ordered_set.cpython-39.pyc
16.04 KB
lrw-r--r--
2023-11-13 21:50:33
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-39.pyc
196.67 KB
lrw-r--r--
2023-11-13 21:50:33
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-39.pyc
236 B
lrw-r--r--
2023-11-13 21:50:32
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).