REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 101.60 KB
Close
//opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/dialects/postgresql/__pycache__/base.cpython-37.pyc
Text
Base64
Qg0NCgAAAADDzDRdW9EBAOMAAAAAAAAAAAAAAABnAAAAQAAAAHOEBAAAZABaAGQBZAJsAW0CWgIBAGQBZANsA1oEZAFkA2wFWgVkBGQFbAZtB1oHAQBkBGQGbAZtCFoIAQBkBGQHbAZtCVoJAQBkBGQIbAZtCloKAQBkBGQJbAttDFoMAQBkBGQKbAttDVoNAQBkBGQLbAltDloOAQBkBGQMbAltD1oPAQBkBGQNbAltEFoQAQBkBGQObAltEVoRAQBkBGQIbAltCloSAQBkBGQPbBNtFFoUAQBkBGQQbBNtFVoVAQBkBGQRbBNtFloWAQBkBGQSbBNtF1oXAQBkBGQTbBNtGFoYAQBkBGQUbBNtGVoZAQBkBGQVbBNtGloaAQBkBGQWbBNtG1obAQBkBGQXbBNtHFocAQBkBGQYbBNtHVodAQBkBGQZbBNtHloeAQB5EGQBZBpsH20gWiEBAFcAbhoEAGUiawqQAXJSAQABAAEAZANaIVkAbgJYAGUFoCNkG2UFaiShAlolZQWgI2QcZQVqJGUFaiZCAKECWidlKGQdZB5kH2QgZCFkImQjZCRkJWQmZCdkKGQpZCpkK2QsZC1kLmQvZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkOmQ7ZDxkPWQ+ZD9kQGRBZEJkQ2REZEVkRmRHZEhkSWRKZEtkTGRNZE5kT2RQZFFkUmRTZFRkVWRWZFdkWGRZZFpkW2RcZF1kXmRfZGBkYWRiZGNkZGRlZGZkZ2RoZGlkamRrZGxkbWRuZG9kcGRxZHJkc2R0ZHVkdmR3ZHhkeWR6ZHtkfGR9ZH5kf2SAZIFkgmdmgwFaKWSDWipkhForZIVaLEcAZIZkh4QAZIdlEWotgwNaLkcAZIhkiYQAZIllEWovgwNaMEcAZIpki4QAZItlEWoxgwNaMmUyWjNHAGSMZI2EAGSNZRFqMYMDWjRlNFo1RwBkjmSPhABkj2URajGDA1o2ZTZaN0cAZJBkkYQAZJFlEWoxgwNaOEcAZJJkk4QAZJNlEWoxgwNaOUcAZJRklYQAZJVlEWoxgwNaOkcAZJZkl4QAZJdlEWo7gwNaO0cAZJhkmYQAZJllEWo8gwNaPEcAZJpkm4QAZJtlEWo9ZRFqPoMEWj9lP1pARwBknGSdhABknWURajGDA1pBZUFaQkcAZJ5kn4QAZJ9lEWoxgwNaIGUgWkNHAGSgZKGEAGShZRFqMYMDWkRHAGSiZKOEAGSjZRFqPWURakWDBFpGZRFqR2U/ZRFqRWVGaQJaSGUZZRRlHGUeZRZlEWpJZRFqSWUdZRplGGUbZTJlNGUgZUFlQWU2ZThlOWU6ZTBlO2U7ZTtlPGU8ZRdlPGUuZRVlP2VEZKScIFpKRwBkpWSmhABkpmUOakuDA1pMRwBkp2SohABkqGUOak2DA1pORwBkqWSqhABkqmUOak+DA1pQRwBkq2SshABkrGUOalGDA1pSRwBkrWSuhABkrmUNalODA1pURwBkr2SwhABksGUIalWDA1pWRwBksWSyhABksmUIalWDA1pXRwBks2S0hABktGUMaliDA1pZRwBktWS2hABktmUMalqDA1pbZANTACm3Ybd/AAAKLi4gZGlhbGVjdDo6IHBvc3RncmVzcWwKICAgIDpuYW1lOiBQb3N0Z3JlU1FMCgouLiBfcG9zdGdyZXNxbF9zZXF1ZW5jZXM6CgpTZXF1ZW5jZXMvU0VSSUFML0lERU5USVRZCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClBvc3RncmVTUUwgc3VwcG9ydHMgc2VxdWVuY2VzLCBhbmQgU1FMQWxjaGVteSB1c2VzIHRoZXNlIGFzIHRoZSBkZWZhdWx0IG1lYW5zCm9mIGNyZWF0aW5nIG5ldyBwcmltYXJ5IGtleSB2YWx1ZXMgZm9yIGludGVnZXItYmFzZWQgcHJpbWFyeSBrZXkgY29sdW1ucy4gV2hlbgpjcmVhdGluZyB0YWJsZXMsIFNRTEFsY2hlbXkgd2lsbCBpc3N1ZSB0aGUgYGBTRVJJQUxgYCBkYXRhdHlwZSBmb3IKaW50ZWdlci1iYXNlZCBwcmltYXJ5IGtleSBjb2x1bW5zLCB3aGljaCBnZW5lcmF0ZXMgYSBzZXF1ZW5jZSBhbmQgc2VydmVyIHNpZGUKZGVmYXVsdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb2x1bW4uCgpUbyBzcGVjaWZ5IGEgc3BlY2lmaWMgbmFtZWQgc2VxdWVuY2UgdG8gYmUgdXNlZCBmb3IgcHJpbWFyeSBrZXkgZ2VuZXJhdGlvbiwKdXNlIHRoZSA6ZnVuYzpgfnNxbGFsY2hlbXkuc2NoZW1hLlNlcXVlbmNlYCBjb25zdHJ1Y3Q6OgoKICAgIFRhYmxlKCdzb21ldGFibGUnLCBtZXRhZGF0YSwKICAgICAgICAgICAgQ29sdW1uKCdpZCcsIEludGVnZXIsIFNlcXVlbmNlKCdzb21lX2lkX3NlcScpLCBwcmltYXJ5X2tleT1UcnVlKQogICAgICAgICkKCldoZW4gU1FMQWxjaGVteSBpc3N1ZXMgYSBzaW5nbGUgSU5TRVJUIHN0YXRlbWVudCwgdG8gZnVsZmlsbCB0aGUgY29udHJhY3Qgb2YKaGF2aW5nIHRoZSAibGFzdCBpbnNlcnQgaWRlbnRpZmllciIgYXZhaWxhYmxlLCBhIFJFVFVSTklORyBjbGF1c2UgaXMgYWRkZWQgdG8KdGhlIElOU0VSVCBzdGF0ZW1lbnQgd2hpY2ggc3BlY2lmaWVzIHRoZSBwcmltYXJ5IGtleSBjb2x1bW5zIHNob3VsZCBiZQpyZXR1cm5lZCBhZnRlciB0aGUgc3RhdGVtZW50IGNvbXBsZXRlcy4gVGhlIFJFVFVSTklORyBmdW5jdGlvbmFsaXR5IG9ubHkgdGFrZXMKcGxhY2UgaWYgUG9zdGdyZVNRTCA4LjIgb3IgbGF0ZXIgaXMgaW4gdXNlLiBBcyBhIGZhbGxiYWNrIGFwcHJvYWNoLCB0aGUKc2VxdWVuY2UsIHdoZXRoZXIgc3BlY2lmaWVkIGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSB2aWEgYGBTRVJJQUxgYCwgaXMKZXhlY3V0ZWQgaW5kZXBlbmRlbnRseSBiZWZvcmVoYW5kLCB0aGUgcmV0dXJuZWQgdmFsdWUgdG8gYmUgdXNlZCBpbiB0aGUKc3Vic2VxdWVudCBpbnNlcnQuIE5vdGUgdGhhdCB3aGVuIGFuCjpmdW5jOmB+c3FsYWxjaGVteS5zcWwuZXhwcmVzc2lvbi5pbnNlcnQoKWAgY29uc3RydWN0IGlzIGV4ZWN1dGVkIHVzaW5nCiJleGVjdXRlbWFueSIgc2VtYW50aWNzLCB0aGUgImxhc3QgaW5zZXJ0ZWQgaWRlbnRpZmllciIgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdAphcHBseTsgbm8gUkVUVVJOSU5HIGNsYXVzZSBpcyBlbWl0dGVkIG5vciBpcyB0aGUgc2VxdWVuY2UgcHJlLWV4ZWN1dGVkIGluIHRoaXMKY2FzZS4KClRvIGZvcmNlIHRoZSB1c2FnZSBvZiBSRVRVUk5JTkcgYnkgZGVmYXVsdCBvZmYsIHNwZWNpZnkgdGhlIGZsYWcKYGBpbXBsaWNpdF9yZXR1cm5pbmc9RmFsc2VgYCB0byA6ZnVuYzpgLmNyZWF0ZV9lbmdpbmVgLgoKUG9zdGdyZVNRTCAxMCBJREVOVElUWSBjb2x1bW5zCl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoKUG9zdGdyZVNRTCAxMCBoYXMgYSBuZXcgSURFTlRJVFkgZmVhdHVyZSB0aGF0IHN1cGVyc2VkZXMgdGhlIHVzZSBvZiBTRVJJQUwuCkJ1aWx0LWluIHN1cHBvcnQgZm9yIHJlbmRlcmluZyBvZiBJREVOVElUWSBpcyBub3QgYXZhaWxhYmxlIHlldCwgaG93ZXZlciB0aGUKZm9sbG93aW5nIGNvbXBpbGF0aW9uIGhvb2sgbWF5IGJlIHVzZWQgdG8gcmVwbGFjZSBvY2N1cnJlbmNlcyBvZiBTRVJJQUwgd2l0aApJREVOVElUWTo6CgogICAgZnJvbSBzcWxhbGNoZW15LnNjaGVtYSBpbXBvcnQgQ3JlYXRlQ29sdW1uCiAgICBmcm9tIHNxbGFsY2hlbXkuZXh0LmNvbXBpbGVyIGltcG9ydCBjb21waWxlcwoKCiAgICBAY29tcGlsZXMoQ3JlYXRlQ29sdW1uLCAncG9zdGdyZXNxbCcpCiAgICBkZWYgdXNlX2lkZW50aXR5KGVsZW1lbnQsIGNvbXBpbGVyLCAqKmt3KToKICAgICAgICB0ZXh0ID0gY29tcGlsZXIudmlzaXRfY3JlYXRlX2NvbHVtbihlbGVtZW50LCAqKmt3KQogICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlNFUklBTCIsICJJTlQgR0VORVJBVEVEIEJZIERFRkFVTFQgQVMgSURFTlRJVFkiKQogICAgICAgIHJldHVybiB0ZXh0CgpVc2luZyB0aGUgYWJvdmUsIGEgdGFibGUgc3VjaCBhczo6CgogICAgdCA9IFRhYmxlKAogICAgICAgICd0JywgbSwKICAgICAgICBDb2x1bW4oJ2lkJywgSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSksCiAgICAgICAgQ29sdW1uKCdkYXRhJywgU3RyaW5nKQogICAgKQoKV2lsbCBnZW5lcmF0ZSBvbiB0aGUgYmFja2luZyBkYXRhYmFzZSBhczo6CgogICAgQ1JFQVRFIFRBQkxFIHQgKAogICAgICAgIGlkIElOVCBHRU5FUkFURUQgQlkgREVGQVVMVCBBUyBJREVOVElUWSBOT1QgTlVMTCwKICAgICAgICBkYXRhIFZBUkNIQVIsCiAgICAgICAgUFJJTUFSWSBLRVkgKGlkKQogICAgKQoKLi4gX3Bvc3RncmVzcWxfaXNvbGF0aW9uX2xldmVsOgoKVHJhbnNhY3Rpb24gSXNvbGF0aW9uIExldmVsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQWxsIFBvc3RncmVTUUwgZGlhbGVjdHMgc3VwcG9ydCBzZXR0aW5nIG9mIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbApib3RoIHZpYSBhIGRpYWxlY3Qtc3BlY2lmaWMgcGFyYW1ldGVyCjpwYXJhbXJlZjpgLmNyZWF0ZV9lbmdpbmUuaXNvbGF0aW9uX2xldmVsYCBhY2NlcHRlZCBieSA6ZnVuYzpgLmNyZWF0ZV9lbmdpbmVgLAphcyB3ZWxsIGFzIHRoZSA6cGFyYW1yZWY6YC5Db25uZWN0aW9uLmV4ZWN1dGlvbl9vcHRpb25zLmlzb2xhdGlvbl9sZXZlbGAKYXJndW1lbnQgYXMgcGFzc2VkIHRvIDptZXRoOmAuQ29ubmVjdGlvbi5leGVjdXRpb25fb3B0aW9uc2AuCldoZW4gdXNpbmcgYSBub24tcHN5Y29wZzIgZGlhbGVjdCwgdGhpcyBmZWF0dXJlIHdvcmtzIGJ5IGlzc3VpbmcgdGhlIGNvbW1hbmQKYGBTRVQgU0VTU0lPTiBDSEFSQUNURVJJU1RJQ1MgQVMgVFJBTlNBQ1RJT04gSVNPTEFUSU9OIExFVkVMIDxsZXZlbD5gYCBmb3IKZWFjaCBuZXcgY29ubmVjdGlvbi4gIEZvciB0aGUgc3BlY2lhbCBBVVRPQ09NTUlUIGlzb2xhdGlvbiBsZXZlbCwKREJBUEktc3BlY2lmaWMgdGVjaG5pcXVlcyBhcmUgdXNlZC4KClRvIHNldCBpc29sYXRpb24gbGV2ZWwgdXNpbmcgOmZ1bmM6YC5jcmVhdGVfZW5naW5lYDo6CgogICAgZW5naW5lID0gY3JlYXRlX2VuZ2luZSgKICAgICAgICAicG9zdGdyZXNxbCtwZzgwMDA6Ly9zY290dDp0aWdlckBsb2NhbGhvc3QvdGVzdCIsCiAgICAgICAgaXNvbGF0aW9uX2xldmVsPSJSRUFEIFVOQ09NTUlUVEVEIgogICAgKQoKVG8gc2V0IHVzaW5nIHBlci1jb25uZWN0aW9uIGV4ZWN1dGlvbiBvcHRpb25zOjoKCiAgICBjb25uZWN0aW9uID0gZW5naW5lLmNvbm5lY3QoKQogICAgY29ubmVjdGlvbiA9IGNvbm5lY3Rpb24uZXhlY3V0aW9uX29wdGlvbnMoCiAgICAgICAgaXNvbGF0aW9uX2xldmVsPSJSRUFEIENPTU1JVFRFRCIKICAgICkKClZhbGlkIHZhbHVlcyBmb3IgYGBpc29sYXRpb25fbGV2ZWxgYCBpbmNsdWRlOgoKKiBgYFJFQUQgQ09NTUlUVEVEYGAKKiBgYFJFQUQgVU5DT01NSVRURURgYAoqIGBgUkVQRUFUQUJMRSBSRUFEYGAKKiBgYFNFUklBTElaQUJMRWBgCiogYGBBVVRPQ09NTUlUYGAgLSBvbiBwc3ljb3BnMiAvIHBnODAwMCBvbmx5CgouLiBzZWVhbHNvOjoKCiAgICA6cmVmOmBwc3ljb3BnMl9pc29sYXRpb25fbGV2ZWxgCgogICAgOnJlZjpgcGc4MDAwX2lzb2xhdGlvbl9sZXZlbGAKCi4uIF9wb3N0Z3Jlc3FsX3NjaGVtYV9yZWZsZWN0aW9uOgoKUmVtb3RlLVNjaGVtYSBUYWJsZSBJbnRyb3NwZWN0aW9uIGFuZCBQb3N0Z3JlU1FMIHNlYXJjaF9wYXRoCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKipUTDtEUjsqKjoga2VlcCB0aGUgYGBzZWFyY2hfcGF0aGBgIHZhcmlhYmxlIHNldCB0byBpdHMgZGVmYXVsdCBvZiBgYHB1YmxpY2BgLApuYW1lIHNjaGVtYXMgKipvdGhlcioqIHRoYW4gYGBwdWJsaWNgYCBleHBsaWNpdGx5IHdpdGhpbiBgYFRhYmxlYGAgZGVmaW5pdGlvbnMuCgpUaGUgUG9zdGdyZVNRTCBkaWFsZWN0IGNhbiByZWZsZWN0IHRhYmxlcyBmcm9tIGFueSBzY2hlbWEuICBUaGUKOnBhcmFtcmVmOmAuVGFibGUuc2NoZW1hYCBhcmd1bWVudCwgb3IgYWx0ZXJuYXRpdmVseSB0aGUKOnBhcmFtcmVmOmAuTWV0YURhdGEucmVmbGVjdC5zY2hlbWFgIGFyZ3VtZW50IGRldGVybWluZXMgd2hpY2ggc2NoZW1hIHdpbGwKYmUgc2VhcmNoZWQgZm9yIHRoZSB0YWJsZSBvciB0YWJsZXMuICAgVGhlIHJlZmxlY3RlZCA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0cwp3aWxsIGluIGFsbCBjYXNlcyByZXRhaW4gdGhpcyBgYC5zY2hlbWFgYCBhdHRyaWJ1dGUgYXMgd2FzIHNwZWNpZmllZC4KSG93ZXZlciwgd2l0aCByZWdhcmRzIHRvIHRhYmxlcyB3aGljaCB0aGVzZSA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0cyByZWZlciB0bwp2aWEgZm9yZWlnbiBrZXkgY29uc3RyYWludCwgYSBkZWNpc2lvbiBtdXN0IGJlIG1hZGUgYXMgdG8gaG93IHRoZSBgYC5zY2hlbWFgYAppcyByZXByZXNlbnRlZCBpbiB0aG9zZSByZW1vdGUgdGFibGVzLCBpbiB0aGUgY2FzZSB3aGVyZSB0aGF0IHJlbW90ZQpzY2hlbWEgbmFtZSBpcyBhbHNvIGEgbWVtYmVyIG9mIHRoZSBjdXJyZW50CmBQb3N0Z3JlU1FMIHNlYXJjaCBwYXRoCjxodHRwOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvY3VycmVudC9zdGF0aWMvZGRsLXNjaGVtYXMuaHRtbCNEREwtU0NIRU1BUy1QQVRIPmBfLgoKQnkgZGVmYXVsdCwgdGhlIFBvc3RncmVTUUwgZGlhbGVjdCBtaW1pY3MgdGhlIGJlaGF2aW9yIGVuY291cmFnZWQgYnkKUG9zdGdyZVNRTCdzIG93biBgYHBnX2dldF9jb25zdHJhaW50ZGVmKClgYCBidWlsdGluIHByb2NlZHVyZS4gIFRoaXMgZnVuY3Rpb24KcmV0dXJucyBhIHNhbXBsZSBkZWZpbml0aW9uIGZvciBhIHBhcnRpY3VsYXIgZm9yZWlnbiBrZXkgY29uc3RyYWludCwKb21pdHRpbmcgdGhlIHJlZmVyZW5jZWQgc2NoZW1hIG5hbWUgZnJvbSB0aGF0IGRlZmluaXRpb24gd2hlbiB0aGUgbmFtZSBpcwphbHNvIGluIHRoZSBQb3N0Z3JlU1FMIHNjaGVtYSBzZWFyY2ggcGF0aC4gIFRoZSBpbnRlcmFjdGlvbiBiZWxvdwppbGx1c3RyYXRlcyB0aGlzIGJlaGF2aW9yOjoKCiAgICB0ZXN0PT4gQ1JFQVRFIFRBQkxFIHRlc3Rfc2NoZW1hLnJlZmVycmVkKGlkIElOVEVHRVIgUFJJTUFSWSBLRVkpOwogICAgQ1JFQVRFIFRBQkxFCiAgICB0ZXN0PT4gQ1JFQVRFIFRBQkxFIHJlZmVycmluZygKICAgIHRlc3QoPiAgICAgICAgIGlkIElOVEVHRVIgUFJJTUFSWSBLRVksCiAgICB0ZXN0KD4gICAgICAgICByZWZlcnJlZF9pZCBJTlRFR0VSIFJFRkVSRU5DRVMgdGVzdF9zY2hlbWEucmVmZXJyZWQoaWQpKTsKICAgIENSRUFURSBUQUJMRQogICAgdGVzdD0+IFNFVCBzZWFyY2hfcGF0aCBUTyBwdWJsaWMsIHRlc3Rfc2NoZW1hOwogICAgdGVzdD0+IFNFTEVDVCBwZ19jYXRhbG9nLnBnX2dldF9jb25zdHJhaW50ZGVmKHIub2lkLCB0cnVlKSBGUk9NCiAgICB0ZXN0LT4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbgogICAgdGVzdC0+IE9OIG4ub2lkID0gYy5yZWxuYW1lc3BhY2UKICAgIHRlc3QtPiBKT0lOIHBnX2NhdGFsb2cucGdfY29uc3RyYWludCByICBPTiBjLm9pZCA9IHIuY29ucmVsaWQKICAgIHRlc3QtPiBXSEVSRSBjLnJlbG5hbWU9J3JlZmVycmluZycgQU5EIHIuY29udHlwZSA9ICdmJwogICAgdGVzdC0+IDsKICAgICAgICAgICAgICAgICAgIHBnX2dldF9jb25zdHJhaW50ZGVmCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICBGT1JFSUdOIEtFWSAocmVmZXJyZWRfaWQpIFJFRkVSRU5DRVMgcmVmZXJyZWQoaWQpCiAgICAoMSByb3cpCgpBYm92ZSwgd2UgY3JlYXRlZCBhIHRhYmxlIGBgcmVmZXJyZWRgYCBhcyBhIG1lbWJlciBvZiB0aGUgcmVtb3RlIHNjaGVtYQpgYHRlc3Rfc2NoZW1hYGAsIGhvd2V2ZXIgd2hlbiB3ZSBhZGRlZCBgYHRlc3Rfc2NoZW1hYGAgdG8gdGhlClBHIGBgc2VhcmNoX3BhdGhgYCBhbmQgdGhlbiBhc2tlZCBgYHBnX2dldF9jb25zdHJhaW50ZGVmKClgYCBmb3IgdGhlCmBgRk9SRUlHTiBLRVlgYCBzeW50YXgsIGBgdGVzdF9zY2hlbWFgYCB3YXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgb2YKdGhlIGZ1bmN0aW9uLgoKT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIHNldCB0aGUgc2VhcmNoIHBhdGggYmFjayB0byB0aGUgdHlwaWNhbCBkZWZhdWx0Cm9mIGBgcHVibGljYGA6OgoKICAgIHRlc3Q9PiBTRVQgc2VhcmNoX3BhdGggVE8gcHVibGljOwogICAgU0VUCgpUaGUgc2FtZSBxdWVyeSBhZ2FpbnN0IGBgcGdfZ2V0X2NvbnN0cmFpbnRkZWYoKWBgIG5vdyByZXR1cm5zIHRoZSBmdWxseQpzY2hlbWEtcXVhbGlmaWVkIG5hbWUgZm9yIHVzOjoKCiAgICB0ZXN0PT4gU0VMRUNUIHBnX2NhdGFsb2cucGdfZ2V0X2NvbnN0cmFpbnRkZWYoci5vaWQsIHRydWUpIEZST00KICAgIHRlc3QtPiBwZ19jYXRhbG9nLnBnX2NsYXNzIGMgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuCiAgICB0ZXN0LT4gT04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZQogICAgdGVzdC0+IEpPSU4gcGdfY2F0YWxvZy5wZ19jb25zdHJhaW50IHIgIE9OIGMub2lkID0gci5jb25yZWxpZAogICAgdGVzdC0+IFdIRVJFIGMucmVsbmFtZT0ncmVmZXJyaW5nJyBBTkQgci5jb250eXBlID0gJ2YnOwogICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2NvbnN0cmFpbnRkZWYKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIEZPUkVJR04gS0VZIChyZWZlcnJlZF9pZCkgUkVGRVJFTkNFUyB0ZXN0X3NjaGVtYS5yZWZlcnJlZChpZCkKICAgICgxIHJvdykKClNRTEFsY2hlbXkgd2lsbCBieSBkZWZhdWx0IHVzZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGBgcGdfZ2V0X2NvbnN0cmFpbnRkZWYoKWBgCmluIG9yZGVyIHRvIGRldGVybWluZSB0aGUgcmVtb3RlIHNjaGVtYSBuYW1lLiAgVGhhdCBpcywgaWYgb3VyIGBgc2VhcmNoX3BhdGhgYAp3ZXJlIHNldCB0byBpbmNsdWRlIGBgdGVzdF9zY2hlbWFgYCwgYW5kIHdlIGludm9rZWQgYSB0YWJsZQpyZWZsZWN0aW9uIHByb2Nlc3MgYXMgZm9sbG93czo6CgogICAgPj4+IGZyb20gc3FsYWxjaGVteSBpbXBvcnQgVGFibGUsIE1ldGFEYXRhLCBjcmVhdGVfZW5naW5lCiAgICA+Pj4gZW5naW5lID0gY3JlYXRlX2VuZ2luZSgicG9zdGdyZXNxbDovL3Njb3R0OnRpZ2VyQGxvY2FsaG9zdC90ZXN0IikKICAgID4+PiB3aXRoIGVuZ2luZS5jb25uZWN0KCkgYXMgY29ubjoKICAgIC4uLiAgICAgY29ubi5leGVjdXRlKCJTRVQgc2VhcmNoX3BhdGggVE8gdGVzdF9zY2hlbWEsIHB1YmxpYyIpCiAgICAuLi4gICAgIG1ldGEgPSBNZXRhRGF0YSgpCiAgICAuLi4gICAgIHJlZmVycmluZyA9IFRhYmxlKCdyZWZlcnJpbmcnLCBtZXRhLAogICAgLi4uICAgICAgICAgICAgICAgICAgICAgICBhdXRvbG9hZD1UcnVlLCBhdXRvbG9hZF93aXRoPWNvbm4pCiAgICAuLi4KICAgIDxzcWxhbGNoZW15LmVuZ2luZS5yZXN1bHQuUmVzdWx0UHJveHkgb2JqZWN0IGF0IDB4MTAxNjEyZWQwPgoKVGhlIGFib3ZlIHByb2Nlc3Mgd291bGQgZGVsaXZlciB0byB0aGUgOmF0dHI6YC5NZXRhRGF0YS50YWJsZXNgIGNvbGxlY3Rpb24KYGByZWZlcnJlZGBgIHRhYmxlIG5hbWVkICoqd2l0aG91dCoqIHRoZSBzY2hlbWE6OgoKICAgID4+PiBtZXRhLnRhYmxlc1sncmVmZXJyZWQnXS5zY2hlbWEgaXMgTm9uZQogICAgVHJ1ZQoKVG8gYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHJlZmxlY3Rpb24gc3VjaCB0aGF0IHRoZSByZWZlcnJlZCBzY2hlbWEgaXMKbWFpbnRhaW5lZCByZWdhcmRsZXNzIG9mIHRoZSBgYHNlYXJjaF9wYXRoYGAgc2V0dGluZywgdXNlIHRoZQpgYHBvc3RncmVzcWxfaWdub3JlX3NlYXJjaF9wYXRoYGAgb3B0aW9uLCB3aGljaCBjYW4gYmUgc3BlY2lmaWVkIGFzIGEKZGlhbGVjdC1zcGVjaWZpYyBhcmd1bWVudCB0byBib3RoIDpjbGFzczpgLlRhYmxlYCBhcyB3ZWxsIGFzCjptZXRoOmAuTWV0YURhdGEucmVmbGVjdGA6OgoKICAgID4+PiB3aXRoIGVuZ2luZS5jb25uZWN0KCkgYXMgY29ubjoKICAgIC4uLiAgICAgY29ubi5leGVjdXRlKCJTRVQgc2VhcmNoX3BhdGggVE8gdGVzdF9zY2hlbWEsIHB1YmxpYyIpCiAgICAuLi4gICAgIG1ldGEgPSBNZXRhRGF0YSgpCiAgICAuLi4gICAgIHJlZmVycmluZyA9IFRhYmxlKCdyZWZlcnJpbmcnLCBtZXRhLCBhdXRvbG9hZD1UcnVlLAogICAgLi4uICAgICAgICAgICAgICAgICAgICAgICBhdXRvbG9hZF93aXRoPWNvbm4sCiAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgIHBvc3RncmVzcWxfaWdub3JlX3NlYXJjaF9wYXRoPVRydWUpCiAgICAuLi4KICAgIDxzcWxhbGNoZW15LmVuZ2luZS5yZXN1bHQuUmVzdWx0UHJveHkgb2JqZWN0IGF0IDB4MTAxNjEyNmQwPgoKV2Ugd2lsbCBub3cgaGF2ZSBgYHRlc3Rfc2NoZW1hLnJlZmVycmVkYGAgc3RvcmVkIGFzIHNjaGVtYS1xdWFsaWZpZWQ6OgoKICAgID4+PiBtZXRhLnRhYmxlc1sndGVzdF9zY2hlbWEucmVmZXJyZWQnXS5zY2hlbWEKICAgICd0ZXN0X3NjaGVtYScKCi4uIHNpZGViYXI6OiBCZXN0IFByYWN0aWNlcyBmb3IgUG9zdGdyZVNRTCBTY2hlbWEgcmVmbGVjdGlvbgoKICAgIFRoZSBkZXNjcmlwdGlvbiBvZiBQb3N0Z3JlU1FMIHNjaGVtYSByZWZsZWN0aW9uIGJlaGF2aW9yIGlzIGNvbXBsZXgsIGFuZAogICAgaXMgdGhlIHByb2R1Y3Qgb2YgbWFueSB5ZWFycyBvZiBkZWFsaW5nIHdpdGggd2lkZWx5IHZhcmllZCB1c2UgY2FzZXMgYW5kCiAgICB1c2VyIHByZWZlcmVuY2VzLiBCdXQgaW4gZmFjdCwgdGhlcmUncyBubyBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IG9mIGl0IGlmCiAgICB5b3UganVzdCBzdGljayB0byB0aGUgc2ltcGxlc3QgdXNlIHBhdHRlcm46IGxlYXZlIHRoZSBgYHNlYXJjaF9wYXRoYGAgc2V0CiAgICB0byBpdHMgZGVmYXVsdCBvZiBgYHB1YmxpY2BgIG9ubHksIG5ldmVyIHJlZmVyIHRvIHRoZSBuYW1lIGBgcHVibGljYGAgYXMKICAgIGFuIGV4cGxpY2l0IHNjaGVtYSBuYW1lIG90aGVyd2lzZSwgYW5kIHJlZmVyIHRvIGFsbCBvdGhlciBzY2hlbWEgbmFtZXMKICAgIGV4cGxpY2l0bHkgd2hlbiBidWlsZGluZyB1cCBhIDpjbGFzczpgLlRhYmxlYCBvYmplY3QuICBUaGUgb3B0aW9ucwogICAgZGVzY3JpYmVkIGhlcmUgYXJlIG9ubHkgZm9yIHRob3NlIHVzZXJzIHdobyBjYW4ndCwgb3IgcHJlZmVyIG5vdCB0bywgc3RheQogICAgd2l0aGluIHRoZXNlIGd1aWRlbGluZXMuCgpOb3RlIHRoYXQgKippbiBhbGwgY2FzZXMqKiwgdGhlICJkZWZhdWx0IiBzY2hlbWEgaXMgYWx3YXlzIHJlZmxlY3RlZCBhcwpgYE5vbmVgYC4gVGhlICJkZWZhdWx0IiBzY2hlbWEgb24gUG9zdGdyZVNRTCBpcyB0aGF0IHdoaWNoIGlzIHJldHVybmVkIGJ5IHRoZQpQb3N0Z3JlU1FMIGBgY3VycmVudF9zY2hlbWEoKWBgIGZ1bmN0aW9uLiAgT24gYSB0eXBpY2FsIFBvc3RncmVTUUwKaW5zdGFsbGF0aW9uLCB0aGlzIGlzIHRoZSBuYW1lIGBgcHVibGljYGAuICBTbyBhIHRhYmxlIHRoYXQgcmVmZXJzIHRvIGFub3RoZXIKd2hpY2ggaXMgaW4gdGhlIGBgcHVibGljYGAgKGkuZS4gZGVmYXVsdCkgc2NoZW1hIHdpbGwgYWx3YXlzIGhhdmUgdGhlCmBgLnNjaGVtYWBgIGF0dHJpYnV0ZSBzZXQgdG8gYGBOb25lYGAuCgouLiB2ZXJzaW9uYWRkZWQ6OiAwLjkuMiBBZGRlZCB0aGUgYGBwb3N0Z3Jlc3FsX2lnbm9yZV9zZWFyY2hfcGF0aGBgCiAgIGRpYWxlY3QtbGV2ZWwgb3B0aW9uIGFjY2VwdGVkIGJ5IDpjbGFzczpgLlRhYmxlYCBhbmQKICAgOm1ldGg6YC5NZXRhRGF0YS5yZWZsZWN0YC4KCgouLiBzZWVhbHNvOjoKCiAgICBgVGhlIFNjaGVtYSBTZWFyY2ggUGF0aAogICAgPGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy85LjAvc3RhdGljL2RkbC1zY2hlbWFzLmh0bWwjRERMLVNDSEVNQVMtUEFUSD5gXwogICAgLSBvbiB0aGUgUG9zdGdyZVNRTCB3ZWJzaXRlLgoKSU5TRVJUL1VQREFURS4uLlJFVFVSTklORwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgZGlhbGVjdCBzdXBwb3J0cyBQRyA4LjIncyBgYElOU0VSVC4uUkVUVVJOSU5HYGAsIGBgVVBEQVRFLi5SRVRVUk5JTkdgYCBhbmQKYGBERUxFVEUuLlJFVFVSTklOR2BgIHN5bnRheGVzLiAgIGBgSU5TRVJULi5SRVRVUk5JTkdgYCBpcyB1c2VkIGJ5IGRlZmF1bHQKZm9yIHNpbmdsZS1yb3cgSU5TRVJUIHN0YXRlbWVudHMgaW4gb3JkZXIgdG8gZmV0Y2ggbmV3bHkgZ2VuZXJhdGVkCnByaW1hcnkga2V5IGlkZW50aWZpZXJzLiAgIFRvIHNwZWNpZnkgYW4gZXhwbGljaXQgYGBSRVRVUk5JTkdgYCBjbGF1c2UsCnVzZSB0aGUgOm1ldGg6YC5fVXBkYXRlQmFzZS5yZXR1cm5pbmdgIG1ldGhvZCBvbiBhIHBlci1zdGF0ZW1lbnQgYmFzaXM6OgoKICAgICMgSU5TRVJULi5SRVRVUk5JTkcKICAgIHJlc3VsdCA9IHRhYmxlLmluc2VydCgpLnJldHVybmluZyh0YWJsZS5jLmNvbDEsIHRhYmxlLmMuY29sMikuXAogICAgICAgIHZhbHVlcyhuYW1lPSdmb28nKQogICAgcHJpbnQgcmVzdWx0LmZldGNoYWxsKCkKCiAgICAjIFVQREFURS4uUkVUVVJOSU5HCiAgICByZXN1bHQgPSB0YWJsZS51cGRhdGUoKS5yZXR1cm5pbmcodGFibGUuYy5jb2wxLCB0YWJsZS5jLmNvbDIpLlwKICAgICAgICB3aGVyZSh0YWJsZS5jLm5hbWU9PSdmb28nKS52YWx1ZXMobmFtZT0nYmFyJykKICAgIHByaW50IHJlc3VsdC5mZXRjaGFsbCgpCgogICAgIyBERUxFVEUuLlJFVFVSTklORwogICAgcmVzdWx0ID0gdGFibGUuZGVsZXRlKCkucmV0dXJuaW5nKHRhYmxlLmMuY29sMSwgdGFibGUuYy5jb2wyKS5cCiAgICAgICAgd2hlcmUodGFibGUuYy5uYW1lPT0nZm9vJykKICAgIHByaW50IHJlc3VsdC5mZXRjaGFsbCgpCgouLiBfcG9zdGdyZXNxbF9pbnNlcnRfb25fY29uZmxpY3Q6CgpJTlNFUlQuLi5PTiBDT05GTElDVCAoVXBzZXJ0KQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClN0YXJ0aW5nIHdpdGggdmVyc2lvbiA5LjUsIFBvc3RncmVTUUwgYWxsb3dzICJ1cHNlcnRzIiAodXBkYXRlIG9yIGluc2VydCkgb2YKcm93cyBpbnRvIGEgdGFibGUgdmlhIHRoZSBgYE9OIENPTkZMSUNUYGAgY2xhdXNlIG9mIHRoZSBgYElOU0VSVGBgIHN0YXRlbWVudC4gQQpjYW5kaWRhdGUgcm93IHdpbGwgb25seSBiZSBpbnNlcnRlZCBpZiB0aGF0IHJvdyBkb2VzIG5vdCB2aW9sYXRlIGFueSB1bmlxdWUKY29uc3RyYWludHMuICBJbiB0aGUgY2FzZSBvZiBhIHVuaXF1ZSBjb25zdHJhaW50IHZpb2xhdGlvbiwgYSBzZWNvbmRhcnkgYWN0aW9uCmNhbiBvY2N1ciB3aGljaCBjYW4gYmUgZWl0aGVyICJETyBVUERBVEUiLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGRhdGEgaW4gdGhlCnRhcmdldCByb3cgc2hvdWxkIGJlIHVwZGF0ZWQsIG9yICJETyBOT1RISU5HIiwgd2hpY2ggaW5kaWNhdGVzIHRvIHNpbGVudGx5IHNraXAKdGhpcyByb3cuCgpDb25mbGljdHMgYXJlIGRldGVybWluZWQgdXNpbmcgZXhpc3RpbmcgdW5pcXVlIGNvbnN0cmFpbnRzIGFuZCBpbmRleGVzLiAgVGhlc2UKY29uc3RyYWludHMgbWF5IGJlIGlkZW50aWZpZWQgZWl0aGVyIHVzaW5nIHRoZWlyIG5hbWUgYXMgc3RhdGVkIGluIERETCwKb3IgdGhleSBtYXkgYmUgKmluZmVycmVkKiBieSBzdGF0aW5nIHRoZSBjb2x1bW5zIGFuZCBjb25kaXRpb25zIHRoYXQgY29tcHJpc2UKdGhlIGluZGV4ZXMuCgpTUUxBbGNoZW15IHByb3ZpZGVzIGBgT04gQ09ORkxJQ1RgYCBzdXBwb3J0IHZpYSB0aGUgUG9zdGdyZVNRTC1zcGVjaWZpYwo6ZnVuYzpgLnBvc3RncmVzcWwuZG1sLmluc2VydCgpYCBmdW5jdGlvbiwgd2hpY2ggcHJvdmlkZXMKdGhlIGdlbmVyYXRpdmUgbWV0aG9kcyA6bWV0aDpgfi5wb3N0Z3Jlc3FsLmRtbC5JbnNlcnQub25fY29uZmxpY3RfZG9fdXBkYXRlYAphbmQgOm1ldGg6YH4ucG9zdGdyZXNxbC5kbWwuSW5zZXJ0Lm9uX2NvbmZsaWN0X2RvX25vdGhpbmdgOjoKCiAgICBmcm9tIHNxbGFsY2hlbXkuZGlhbGVjdHMucG9zdGdyZXNxbCBpbXBvcnQgaW5zZXJ0CgogICAgaW5zZXJ0X3N0bXQgPSBpbnNlcnQobXlfdGFibGUpLnZhbHVlcygKICAgICAgICBpZD0nc29tZV9leGlzdGluZ19pZCcsCiAgICAgICAgZGF0YT0naW5zZXJ0ZWQgdmFsdWUnKQoKICAgIGRvX25vdGhpbmdfc3RtdCA9IGluc2VydF9zdG10Lm9uX2NvbmZsaWN0X2RvX25vdGhpbmcoCiAgICAgICAgaW5kZXhfZWxlbWVudHM9WydpZCddCiAgICApCgogICAgY29ubi5leGVjdXRlKGRvX25vdGhpbmdfc3RtdCkKCiAgICBkb191cGRhdGVfc3RtdCA9IGluc2VydF9zdG10Lm9uX2NvbmZsaWN0X2RvX3VwZGF0ZSgKICAgICAgICBjb25zdHJhaW50PSdwa19teV90YWJsZScsCiAgICAgICAgc2V0Xz1kaWN0KGRhdGE9J3VwZGF0ZWQgdmFsdWUnKQogICAgKQoKICAgIGNvbm4uZXhlY3V0ZShkb191cGRhdGVfc3RtdCkKCkJvdGggbWV0aG9kcyBzdXBwbHkgdGhlICJ0YXJnZXQiIG9mIHRoZSBjb25mbGljdCB1c2luZyBlaXRoZXIgdGhlCm5hbWVkIGNvbnN0cmFpbnQgb3IgYnkgY29sdW1uIGluZmVyZW5jZToKCiogVGhlIDpwYXJhbXJlZjpgLkluc2VydC5vbl9jb25mbGljdF9kb191cGRhdGUuaW5kZXhfZWxlbWVudHNgIGFyZ3VtZW50CiAgc3BlY2lmaWVzIGEgc2VxdWVuY2UgY29udGFpbmluZyBzdHJpbmcgY29sdW1uIG5hbWVzLCA6Y2xhc3M6YC5Db2x1bW5gCiAgb2JqZWN0cywgYW5kL29yIFNRTCBleHByZXNzaW9uIGVsZW1lbnRzLCB3aGljaCB3b3VsZCBpZGVudGlmeSBhIHVuaXF1ZQogIGluZGV4OjoKCiAgICBkb191cGRhdGVfc3RtdCA9IGluc2VydF9zdG10Lm9uX2NvbmZsaWN0X2RvX3VwZGF0ZSgKICAgICAgICBpbmRleF9lbGVtZW50cz1bJ2lkJ10sCiAgICAgICAgc2V0Xz1kaWN0KGRhdGE9J3VwZGF0ZWQgdmFsdWUnKQogICAgKQoKICAgIGRvX3VwZGF0ZV9zdG10ID0gaW5zZXJ0X3N0bXQub25fY29uZmxpY3RfZG9fdXBkYXRlKAogICAgICAgIGluZGV4X2VsZW1lbnRzPVtteV90YWJsZS5jLmlkXSwKICAgICAgICBzZXRfPWRpY3QoZGF0YT0ndXBkYXRlZCB2YWx1ZScpCiAgICApCgoqIFdoZW4gdXNpbmcgOnBhcmFtcmVmOmAuSW5zZXJ0Lm9uX2NvbmZsaWN0X2RvX3VwZGF0ZS5pbmRleF9lbGVtZW50c2AgdG8KICBpbmZlciBhbiBpbmRleCwgYSBwYXJ0aWFsIGluZGV4IGNhbiBiZSBpbmZlcnJlZCBieSBhbHNvIHNwZWNpZnlpbmcgdGhlCiAgdXNlIHRoZSA6cGFyYW1yZWY6YC5JbnNlcnQub25fY29uZmxpY3RfZG9fdXBkYXRlLmluZGV4X3doZXJlYCBwYXJhbWV0ZXI6OgoKICAgIGZyb20gc3FsYWxjaGVteS5kaWFsZWN0cy5wb3N0Z3Jlc3FsIGltcG9ydCBpbnNlcnQKCiAgICBzdG10ID0gaW5zZXJ0KG15X3RhYmxlKS52YWx1ZXModXNlcl9lbWFpbD0nYUBiLmNvbScsIGRhdGE9J2luc2VydGVkIGRhdGEnKQogICAgc3RtdCA9IHN0bXQub25fY29uZmxpY3RfZG9fdXBkYXRlKAogICAgICAgIGluZGV4X2VsZW1lbnRzPVtteV90YWJsZS5jLnVzZXJfZW1haWxdLAogICAgICAgIGluZGV4X3doZXJlPW15X3RhYmxlLmMudXNlcl9lbWFpbC5saWtlKCclQGdtYWlsLmNvbScpLAogICAgICAgIHNldF89ZGljdChkYXRhPXN0bXQuZXhjbHVkZWQuZGF0YSkKICAgICAgICApCiAgICBjb25uLmV4ZWN1dGUoc3RtdCkKCiogVGhlIDpwYXJhbXJlZjpgLkluc2VydC5vbl9jb25mbGljdF9kb191cGRhdGUuY29uc3RyYWludGAgYXJndW1lbnQgaXMKICB1c2VkIHRvIHNwZWNpZnkgYW4gaW5kZXggZGlyZWN0bHkgcmF0aGVyIHRoYW4gaW5mZXJyaW5nIGl0LiAgVGhpcyBjYW4gYmUKICB0aGUgbmFtZSBvZiBhIFVOSVFVRSBjb25zdHJhaW50LCBhIFBSSU1BUlkgS0VZIGNvbnN0cmFpbnQsIG9yIGFuIElOREVYOjoKCiAgICBkb191cGRhdGVfc3RtdCA9IGluc2VydF9zdG10Lm9uX2NvbmZsaWN0X2RvX3VwZGF0ZSgKICAgICAgICBjb25zdHJhaW50PSdteV90YWJsZV9pZHhfMScsCiAgICAgICAgc2V0Xz1kaWN0KGRhdGE9J3VwZGF0ZWQgdmFsdWUnKQogICAgKQoKICAgIGRvX3VwZGF0ZV9zdG10ID0gaW5zZXJ0X3N0bXQub25fY29uZmxpY3RfZG9fdXBkYXRlKAogICAgICAgIGNvbnN0cmFpbnQ9J215X3RhYmxlX3BrJywKICAgICAgICBzZXRfPWRpY3QoZGF0YT0ndXBkYXRlZCB2YWx1ZScpCiAgICApCgoqIFRoZSA6cGFyYW1yZWY6YC5JbnNlcnQub25fY29uZmxpY3RfZG9fdXBkYXRlLmNvbnN0cmFpbnRgIGFyZ3VtZW50IG1heQogIGFsc28gcmVmZXIgdG8gYSBTUUxBbGNoZW15IGNvbnN0cnVjdCByZXByZXNlbnRpbmcgYSBjb25zdHJhaW50LAogIGUuZy4gOmNsYXNzOmAuVW5pcXVlQ29uc3RyYWludGAsIDpjbGFzczpgLlByaW1hcnlLZXlDb25zdHJhaW50YCwKICA6Y2xhc3M6YC5JbmRleGAsIG9yIDpjbGFzczpgLkV4Y2x1ZGVDb25zdHJhaW50YC4gICBJbiB0aGlzIHVzZSwKICBpZiB0aGUgY29uc3RyYWludCBoYXMgYSBuYW1lLCBpdCBpcyB1c2VkIGRpcmVjdGx5LiAgT3RoZXJ3aXNlLCBpZiB0aGUKICBjb25zdHJhaW50IGlzIHVubmFtZWQsIHRoZW4gaW5mZXJlbmNlIHdpbGwgYmUgdXNlZCwgd2hlcmUgdGhlIGV4cHJlc3Npb25zCiAgYW5kIG9wdGlvbmFsIFdIRVJFIGNsYXVzZSBvZiB0aGUgY29uc3RyYWludCB3aWxsIGJlIHNwZWxsZWQgb3V0IGluIHRoZQogIGNvbnN0cnVjdC4gIFRoaXMgdXNlIGlzIGVzcGVjaWFsbHkgY29udmVuaWVudAogIHRvIHJlZmVyIHRvIHRoZSBuYW1lZCBvciB1bm5hbWVkIHByaW1hcnkga2V5IG9mIGEgOmNsYXNzOmAuVGFibGVgIHVzaW5nIHRoZQogIDphdHRyOmAuVGFibGUucHJpbWFyeV9rZXlgIGF0dHJpYnV0ZTo6CgogICAgZG9fdXBkYXRlX3N0bXQgPSBpbnNlcnRfc3RtdC5vbl9jb25mbGljdF9kb191cGRhdGUoCiAgICAgICAgY29uc3RyYWludD1teV90YWJsZS5wcmltYXJ5X2tleSwKICAgICAgICBzZXRfPWRpY3QoZGF0YT0ndXBkYXRlZCB2YWx1ZScpCiAgICApCgpgYE9OIENPTkZMSUNULi4uRE8gVVBEQVRFYGAgaXMgdXNlZCB0byBwZXJmb3JtIGFuIHVwZGF0ZSBvZiB0aGUgYWxyZWFkeQpleGlzdGluZyByb3csIHVzaW5nIGFueSBjb21iaW5hdGlvbiBvZiBuZXcgdmFsdWVzIGFzIHdlbGwgYXMgdmFsdWVzCmZyb20gdGhlIHByb3Bvc2VkIGluc2VydGlvbi4gICBUaGVzZSB2YWx1ZXMgYXJlIHNwZWNpZmllZCB1c2luZyB0aGUKOnBhcmFtcmVmOmAuSW5zZXJ0Lm9uX2NvbmZsaWN0X2RvX3VwZGF0ZS5zZXRfYCBwYXJhbWV0ZXIuICBUaGlzCnBhcmFtZXRlciBhY2NlcHRzIGEgZGljdGlvbmFyeSB3aGljaCBjb25zaXN0cyBvZiBkaXJlY3QgdmFsdWVzCmZvciBVUERBVEU6OgoKICAgIGZyb20gc3FsYWxjaGVteS5kaWFsZWN0cy5wb3N0Z3Jlc3FsIGltcG9ydCBpbnNlcnQKCiAgICBzdG10ID0gaW5zZXJ0KG15X3RhYmxlKS52YWx1ZXMoaWQ9J3NvbWVfaWQnLCBkYXRhPSdpbnNlcnRlZCB2YWx1ZScpCiAgICBkb191cGRhdGVfc3RtdCA9IHN0bXQub25fY29uZmxpY3RfZG9fdXBkYXRlKAogICAgICAgIGluZGV4X2VsZW1lbnRzPVsnaWQnXSwKICAgICAgICBzZXRfPWRpY3QoZGF0YT0ndXBkYXRlZCB2YWx1ZScpCiAgICAgICAgKQogICAgY29ubi5leGVjdXRlKGRvX3VwZGF0ZV9zdG10KQoKLi4gd2FybmluZzo6CgogICAgVGhlIDptZXRoOmAuSW5zZXJ0Lm9uX2NvbmZsaWN0X2RvX3VwZGF0ZWAgbWV0aG9kIGRvZXMgKipub3QqKiB0YWtlIGludG8KICAgIGFjY291bnQgUHl0aG9uLXNpZGUgZGVmYXVsdCBVUERBVEUgdmFsdWVzIG9yIGdlbmVyYXRpb24gZnVuY3Rpb25zLCBlLmcuCiAgICBlLmcuIHRob3NlIHNwZWNpZmllZCB1c2luZyA6cGFyYW1yZWY6YC5Db2x1bW4ub251cGRhdGVgLgogICAgVGhlc2UgdmFsdWVzIHdpbGwgbm90IGJlIGV4ZXJjaXNlZCBmb3IgYW4gT04gQ09ORkxJQ1Qgc3R5bGUgb2YgVVBEQVRFLAogICAgdW5sZXNzIHRoZXkgYXJlIG1hbnVhbGx5IHNwZWNpZmllZCBpbiB0aGUKICAgIDpwYXJhbXJlZjpgLkluc2VydC5vbl9jb25mbGljdF9kb191cGRhdGUuc2V0X2AgZGljdGlvbmFyeS4KCkluIG9yZGVyIHRvIHJlZmVyIHRvIHRoZSBwcm9wb3NlZCBpbnNlcnRpb24gcm93LCB0aGUgc3BlY2lhbCBhbGlhcwo6YXR0cjpgfi5wb3N0Z3Jlc3FsLmRtbC5JbnNlcnQuZXhjbHVkZWRgIGlzIGF2YWlsYWJsZSBhcyBhbiBhdHRyaWJ1dGUgb24KdGhlIDpjbGFzczpgLnBvc3RncmVzcWwuZG1sLkluc2VydGAgb2JqZWN0OyB0aGlzIG9iamVjdCBpcyBhCjpjbGFzczpgLkNvbHVtbkNvbGxlY3Rpb25gIHdoaWNoIGFsaWFzIGNvbnRhaW5zIGFsbCBjb2x1bW5zIG9mIHRoZSB0YXJnZXQKdGFibGU6OgoKICAgIGZyb20gc3FsYWxjaGVteS5kaWFsZWN0cy5wb3N0Z3Jlc3FsIGltcG9ydCBpbnNlcnQKCiAgICBzdG10ID0gaW5zZXJ0KG15X3RhYmxlKS52YWx1ZXMoCiAgICAgICAgaWQ9J3NvbWVfaWQnLAogICAgICAgIGRhdGE9J2luc2VydGVkIHZhbHVlJywKICAgICAgICBhdXRob3I9J2psaCcpCiAgICBkb191cGRhdGVfc3RtdCA9IHN0bXQub25fY29uZmxpY3RfZG9fdXBkYXRlKAogICAgICAgIGluZGV4X2VsZW1lbnRzPVsnaWQnXSwKICAgICAgICBzZXRfPWRpY3QoZGF0YT0ndXBkYXRlZCB2YWx1ZScsIGF1dGhvcj1zdG10LmV4Y2x1ZGVkLmF1dGhvcikKICAgICAgICApCiAgICBjb25uLmV4ZWN1dGUoZG9fdXBkYXRlX3N0bXQpCgpUaGUgOm1ldGg6YC5JbnNlcnQub25fY29uZmxpY3RfZG9fdXBkYXRlYCBtZXRob2QgYWxzbyBhY2NlcHRzCmEgV0hFUkUgY2xhdXNlIHVzaW5nIHRoZSA6cGFyYW1yZWY6YC5JbnNlcnQub25fY29uZmxpY3RfZG9fdXBkYXRlLndoZXJlYApwYXJhbWV0ZXIsIHdoaWNoIHdpbGwgbGltaXQgdGhvc2Ugcm93cyB3aGljaCByZWNlaXZlIGFuIFVQREFURTo6CgogICAgZnJvbSBzcWxhbGNoZW15LmRpYWxlY3RzLnBvc3RncmVzcWwgaW1wb3J0IGluc2VydAoKICAgIHN0bXQgPSBpbnNlcnQobXlfdGFibGUpLnZhbHVlcygKICAgICAgICBpZD0nc29tZV9pZCcsCiAgICAgICAgZGF0YT0naW5zZXJ0ZWQgdmFsdWUnLAogICAgICAgIGF1dGhvcj0namxoJykKICAgIG9uX3VwZGF0ZV9zdG10ID0gc3RtdC5vbl9jb25mbGljdF9kb191cGRhdGUoCiAgICAgICAgaW5kZXhfZWxlbWVudHM9WydpZCddLAogICAgICAgIHNldF89ZGljdChkYXRhPSd1cGRhdGVkIHZhbHVlJywgYXV0aG9yPXN0bXQuZXhjbHVkZWQuYXV0aG9yKQogICAgICAgIHdoZXJlPShteV90YWJsZS5jLnN0YXR1cyA9PSAyKQogICAgICAgICkKICAgIGNvbm4uZXhlY3V0ZShvbl91cGRhdGVfc3RtdCkKCmBgT04gQ09ORkxJQ1RgYCBtYXkgYWxzbyBiZSB1c2VkIHRvIHNraXAgaW5zZXJ0aW5nIGEgcm93IGVudGlyZWx5CmlmIGFueSBjb25mbGljdCB3aXRoIGEgdW5pcXVlIG9yIGV4Y2x1c2lvbiBjb25zdHJhaW50IG9jY3VyczsgYmVsb3cKdGhpcyBpcyBpbGx1c3RyYXRlZCB1c2luZyB0aGUKOm1ldGg6YH4ucG9zdGdyZXNxbC5kbWwuSW5zZXJ0Lm9uX2NvbmZsaWN0X2RvX25vdGhpbmdgIG1ldGhvZDo6CgogICAgZnJvbSBzcWxhbGNoZW15LmRpYWxlY3RzLnBvc3RncmVzcWwgaW1wb3J0IGluc2VydAoKICAgIHN0bXQgPSBpbnNlcnQobXlfdGFibGUpLnZhbHVlcyhpZD0nc29tZV9pZCcsIGRhdGE9J2luc2VydGVkIHZhbHVlJykKICAgIHN0bXQgPSBzdG10Lm9uX2NvbmZsaWN0X2RvX25vdGhpbmcoaW5kZXhfZWxlbWVudHM9WydpZCddKQogICAgY29ubi5leGVjdXRlKHN0bXQpCgpJZiBgYERPIE5PVEhJTkdgYCBpcyB1c2VkIHdpdGhvdXQgc3BlY2lmeWluZyBhbnkgY29sdW1ucyBvciBjb25zdHJhaW50LAppdCBoYXMgdGhlIGVmZmVjdCBvZiBza2lwcGluZyB0aGUgSU5TRVJUIGZvciBhbnkgdW5pcXVlIG9yIGV4Y2x1c2lvbgpjb25zdHJhaW50IHZpb2xhdGlvbiB3aGljaCBvY2N1cnM6OgoKICAgIGZyb20gc3FsYWxjaGVteS5kaWFsZWN0cy5wb3N0Z3Jlc3FsIGltcG9ydCBpbnNlcnQKCiAgICBzdG10ID0gaW5zZXJ0KG15X3RhYmxlKS52YWx1ZXMoaWQ9J3NvbWVfaWQnLCBkYXRhPSdpbnNlcnRlZCB2YWx1ZScpCiAgICBzdG10ID0gc3RtdC5vbl9jb25mbGljdF9kb19ub3RoaW5nKCkKICAgIGNvbm4uZXhlY3V0ZShzdG10KQoKLi4gdmVyc2lvbmFkZGVkOjogMS4xIEFkZGVkIHN1cHBvcnQgZm9yIFBvc3RncmVTUUwgT04gQ09ORkxJQ1QgY2xhdXNlcwoKLi4gc2VlYWxzbzo6CgogICAgYElOU0VSVCAuLiBPTiBDT05GTElDVAogICAgPGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3N0YXRpYy9zcWwtaW5zZXJ0Lmh0bWwjU1FMLU9OLUNPTkZMSUNUPmBfCiAgICAtIGluIHRoZSBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24uCgouLiBfcG9zdGdyZXNxbF9tYXRjaDoKCkZ1bGwgVGV4dCBTZWFyY2gKLS0tLS0tLS0tLS0tLS0tLQoKU1FMQWxjaGVteSBtYWtlcyBhdmFpbGFibGUgdGhlIFBvc3RncmVTUUwgYGBAQGBgIG9wZXJhdG9yIHZpYSB0aGUKOm1ldGg6YC5Db2x1bW5FbGVtZW50Lm1hdGNoYCBtZXRob2Qgb24gYW55IHRleHR1YWwgY29sdW1uIGV4cHJlc3Npb24uCk9uIGEgUG9zdGdyZVNRTCBkaWFsZWN0LCBhbiBleHByZXNzaW9uIGxpa2UgdGhlIGZvbGxvd2luZzo6CgogICAgc2VsZWN0KFtzb21ldGFibGUuYy50ZXh0Lm1hdGNoKCJzZWFyY2ggc3RyaW5nIildKQoKd2lsbCBlbWl0IHRvIHRoZSBkYXRhYmFzZTo6CgogICAgU0VMRUNUIHRleHQgQEAgdG9fdHNxdWVyeSgnc2VhcmNoIHN0cmluZycpIEZST00gdGFibGUKClRoZSBQb3N0Z3JlU1FMIHRleHQgc2VhcmNoIGZ1bmN0aW9ucyBzdWNoIGFzIGBgdG9fdHNxdWVyeSgpYGAKYW5kIGBgdG9fdHN2ZWN0b3IoKWBgIGFyZSBhdmFpbGFibGUKZXhwbGljaXRseSB1c2luZyB0aGUgc3RhbmRhcmQgOmRhdGE6YC5mdW5jYCBjb25zdHJ1Y3QuICBGb3IgZXhhbXBsZTo6CgogICAgc2VsZWN0KFsKICAgICAgICBmdW5jLnRvX3RzdmVjdG9yKCdmYXQgY2F0cyBhdGUgcmF0cycpLm1hdGNoKCdjYXQgJiByYXQnKQogICAgXSkKCkVtaXRzIHRoZSBlcXVpdmFsZW50IG9mOjoKCiAgICBTRUxFQ1QgdG9fdHN2ZWN0b3IoJ2ZhdCBjYXRzIGF0ZSByYXRzJykgQEAgdG9fdHNxdWVyeSgnY2F0ICYgcmF0JykKClRoZSA6Y2xhc3M6YC5wb3N0Z3Jlc3FsLlRTVkVDVE9SYCB0eXBlIGNhbiBwcm92aWRlIGZvciBleHBsaWNpdCBDQVNUOjoKCiAgICBmcm9tIHNxbGFsY2hlbXkuZGlhbGVjdHMucG9zdGdyZXNxbCBpbXBvcnQgVFNWRUNUT1IKICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgc2VsZWN0LCBjYXN0CiAgICBzZWxlY3QoW2Nhc3QoInNvbWUgdGV4dCIsIFRTVkVDVE9SKV0pCgpwcm9kdWNlcyBhIHN0YXRlbWVudCBlcXVpdmFsZW50IHRvOjoKCiAgICBTRUxFQ1QgQ0FTVCgnc29tZSB0ZXh0JyBBUyBUU1ZFQ1RPUikgQVMgYW5vbl8xCgpGdWxsIFRleHQgU2VhcmNoZXMgaW4gUG9zdGdyZVNRTCBhcmUgaW5mbHVlbmNlZCBieSBhIGNvbWJpbmF0aW9uIG9mOiB0aGUKUG9zdGdyZVNRTCBzZXR0aW5nIG9mIGBgZGVmYXVsdF90ZXh0X3NlYXJjaF9jb25maWdgYCwgdGhlIGBgcmVnY29uZmlnYGAgdXNlZAp0byBidWlsZCB0aGUgR0lOL0dpU1QgaW5kZXhlcywgYW5kIHRoZSBgYHJlZ2NvbmZpZ2BgIG9wdGlvbmFsbHkgcGFzc2VkIGluCmR1cmluZyBhIHF1ZXJ5LgoKV2hlbiBwZXJmb3JtaW5nIGEgRnVsbCBUZXh0IFNlYXJjaCBhZ2FpbnN0IGEgY29sdW1uIHRoYXQgaGFzIGEgR0lOIG9yCkdpU1QgaW5kZXggdGhhdCBpcyBhbHJlYWR5IHByZS1jb21wdXRlZCAod2hpY2ggaXMgY29tbW9uIG9uIGZ1bGwgdGV4dApzZWFyY2hlcykgb25lIG1heSBuZWVkIHRvIGV4cGxpY2l0bHkgcGFzcyBpbiBhIHBhcnRpY3VsYXIgUG9zdGdyZVNRTApgYHJlZ2NvbmZpZ2BgIHZhbHVlIHRvIGVuc3VyZSB0aGUgcXVlcnktcGxhbm5lciB1dGlsaXplcyB0aGUgaW5kZXggYW5kIGRvZXMKbm90IHJlLWNvbXB1dGUgdGhlIGNvbHVtbiBvbiBkZW1hbmQuCgpJbiBvcmRlciB0byBwcm92aWRlIGZvciB0aGlzIGV4cGxpY2l0IHF1ZXJ5IHBsYW5uaW5nLCBvciB0byB1c2UgZGlmZmVyZW50CnNlYXJjaCBzdHJhdGVnaWVzLCB0aGUgYGBtYXRjaGBgIG1ldGhvZCBhY2NlcHRzIGEgYGBwb3N0Z3Jlc3FsX3JlZ2NvbmZpZ2BgCmtleXdvcmQgYXJndW1lbnQ6OgoKICAgIHNlbGVjdChbbXl0YWJsZS5jLmlkXSkud2hlcmUoCiAgICAgICAgbXl0YWJsZS5jLnRpdGxlLm1hdGNoKCdzb21lc3RyaW5nJywgcG9zdGdyZXNxbF9yZWdjb25maWc9J2VuZ2xpc2gnKQogICAgKQoKRW1pdHMgdGhlIGVxdWl2YWxlbnQgb2Y6OgoKICAgIFNFTEVDVCBteXRhYmxlLmlkIEZST00gbXl0YWJsZQogICAgV0hFUkUgbXl0YWJsZS50aXRsZSBAQCB0b190c3F1ZXJ5KCdlbmdsaXNoJywgJ3NvbWVzdHJpbmcnKQoKT25lIGNhbiBhbHNvIHNwZWNpZmljYWxseSBwYXNzIGluIGEgYCdyZWdjb25maWcnYCB2YWx1ZSB0byB0aGUKYGB0b190c3ZlY3RvcigpYGAgY29tbWFuZCBhcyB0aGUgaW5pdGlhbCBhcmd1bWVudDo6CgogICAgc2VsZWN0KFtteXRhYmxlLmMuaWRdKS53aGVyZSgKICAgICAgICAgICAgZnVuYy50b190c3ZlY3RvcignZW5nbGlzaCcsIG15dGFibGUuYy50aXRsZSApXAogICAgICAgICAgICAubWF0Y2goJ3NvbWVzdHJpbmcnLCBwb3N0Z3Jlc3FsX3JlZ2NvbmZpZz0nZW5nbGlzaCcpCiAgICAgICAgKQoKcHJvZHVjZXMgYSBzdGF0ZW1lbnQgZXF1aXZhbGVudCB0bzo6CgogICAgU0VMRUNUIG15dGFibGUuaWQgRlJPTSBteXRhYmxlCiAgICBXSEVSRSB0b190c3ZlY3RvcignZW5nbGlzaCcsIG15dGFibGUudGl0bGUpIEBACiAgICAgICAgdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdzb21lc3RyaW5nJykKCkl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0aGUgYGBFWFBMQUlOIEFOQUxZWkUuLi5gYCB0b29sIGZyb20KUG9zdGdyZVNRTCB0byBlbnN1cmUgdGhhdCB5b3UgYXJlIGdlbmVyYXRpbmcgcXVlcmllcyB3aXRoIFNRTEFsY2hlbXkgdGhhdAp0YWtlIGZ1bGwgYWR2YW50YWdlIG9mIGFueSBpbmRleGVzIHlvdSBtYXkgaGF2ZSBjcmVhdGVkIGZvciBmdWxsIHRleHQgc2VhcmNoLgoKRlJPTSBPTkxZIC4uLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBkaWFsZWN0IHN1cHBvcnRzIFBvc3RncmVTUUwncyBPTkxZIGtleXdvcmQgZm9yIHRhcmdldGluZyBvbmx5IGEgcGFydGljdWxhcgp0YWJsZSBpbiBhbiBpbmhlcml0YW5jZSBoaWVyYXJjaHkuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvZHVjZSB0aGUKYGBTRUxFQ1QgLi4uIEZST00gT05MWWBgLCBgYFVQREFURSBPTkxZIC4uLmBgLCBhbmQgYGBERUxFVEUgRlJPTSBPTkxZIC4uLmBgCnN5bnRheGVzLiBJdCB1c2VzIFNRTEFsY2hlbXkncyBoaW50cyBtZWNoYW5pc206OgoKICAgICMgU0VMRUNUIC4uLiBGUk9NIE9OTFkgLi4uCiAgICByZXN1bHQgPSB0YWJsZS5zZWxlY3QoKS53aXRoX2hpbnQodGFibGUsICdPTkxZJywgJ3Bvc3RncmVzcWwnKQogICAgcHJpbnQgcmVzdWx0LmZldGNoYWxsKCkKCiAgICAjIFVQREFURSBPTkxZIC4uLgogICAgdGFibGUudXBkYXRlKHZhbHVlcz1kaWN0KGZvbz0nYmFyJykpLndpdGhfaGludCgnT05MWScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxlY3RfbmFtZT0ncG9zdGdyZXNxbCcpCgogICAgIyBERUxFVEUgRlJPTSBPTkxZIC4uLgogICAgdGFibGUuZGVsZXRlKCkud2l0aF9oaW50KCdPTkxZJywgZGlhbGVjdF9uYW1lPSdwb3N0Z3Jlc3FsJykKCgouLiBfcG9zdGdyZXNxbF9pbmRleGVzOgoKUG9zdGdyZVNRTC1TcGVjaWZpYyBJbmRleCBPcHRpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKU2V2ZXJhbCBleHRlbnNpb25zIHRvIHRoZSA6Y2xhc3M6YC5JbmRleGAgY29uc3RydWN0IGFyZSBhdmFpbGFibGUsIHNwZWNpZmljCnRvIHRoZSBQb3N0Z3JlU1FMIGRpYWxlY3QuCgouLiBfcG9zdGdyZXNxbF9wYXJ0aWFsX2luZGV4ZXM6CgpQYXJ0aWFsIEluZGV4ZXMKXl5eXl5eXl5eXl5eXl5eCgpQYXJ0aWFsIGluZGV4ZXMgYWRkIGNyaXRlcmlvbiB0byB0aGUgaW5kZXggZGVmaW5pdGlvbiBzbyB0aGF0IHRoZSBpbmRleCBpcwphcHBsaWVkIHRvIGEgc3Vic2V0IG9mIHJvd3MuICAgVGhlc2UgY2FuIGJlIHNwZWNpZmllZCBvbiA6Y2xhc3M6YC5JbmRleGAKdXNpbmcgdGhlIGBgcG9zdGdyZXNxbF93aGVyZWBgIGtleXdvcmQgYXJndW1lbnQ6OgoKICBJbmRleCgnbXlfaW5kZXgnLCBteV90YWJsZS5jLmlkLCBwb3N0Z3Jlc3FsX3doZXJlPW15X3RhYmxlLmMudmFsdWUgPiAxMCkKCk9wZXJhdG9yIENsYXNzZXMKXl5eXl5eXl5eXl5eXl5eXgoKUG9zdGdyZVNRTCBhbGxvd3MgdGhlIHNwZWNpZmljYXRpb24gb2YgYW4gKm9wZXJhdG9yIGNsYXNzKiBmb3IgZWFjaCBjb2x1bW4gb2YKYW4gaW5kZXggKHNlZQpodHRwOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvOC4zL2ludGVyYWN0aXZlL2luZGV4ZXMtb3BjbGFzcy5odG1sKS4KVGhlIDpjbGFzczpgLkluZGV4YCBjb25zdHJ1Y3QgYWxsb3dzIHRoZXNlIHRvIGJlIHNwZWNpZmllZCB2aWEgdGhlCmBgcG9zdGdyZXNxbF9vcHNgYCBrZXl3b3JkIGFyZ3VtZW50OjoKCiAgICBJbmRleCgKICAgICAgICAnbXlfaW5kZXgnLCBteV90YWJsZS5jLmlkLCBteV90YWJsZS5jLmRhdGEsCiAgICAgICAgcG9zdGdyZXNxbF9vcHM9ewogICAgICAgICAgICAnZGF0YSc6ICd0ZXh0X3BhdHRlcm5fb3BzJywKICAgICAgICAgICAgJ2lkJzogJ2ludDRfb3BzJwogICAgICAgIH0pCgpOb3RlIHRoYXQgdGhlIGtleXMgaW4gdGhlIGBgcG9zdGdyZXNxbF9vcHNgYCBkaWN0aW9uYXJ5IGFyZSB0aGUgImtleSIgbmFtZSBvZgp0aGUgOmNsYXNzOmAuQ29sdW1uYCwgaS5lLiB0aGUgbmFtZSB1c2VkIHRvIGFjY2VzcyBpdCBmcm9tIHRoZSBgYC5jYGAKY29sbGVjdGlvbiBvZiA6Y2xhc3M6YC5UYWJsZWAsIHdoaWNoIGNhbiBiZSBjb25maWd1cmVkIHRvIGJlIGRpZmZlcmVudCB0aGFuCnRoZSBhY3R1YWwgbmFtZSBvZiB0aGUgY29sdW1uIGFzIGV4cHJlc3NlZCBpbiB0aGUgZGF0YWJhc2UuCgpJZiBgYHBvc3RncmVzcWxfb3BzYGAgaXMgdG8gYmUgdXNlZCBhZ2FpbnN0IGEgY29tcGxleCBTUUwgZXhwcmVzc2lvbiBzdWNoCmFzIGEgZnVuY3Rpb24gY2FsbCwgdGhlbiB0byBhcHBseSB0byB0aGUgY29sdW1uIGl0IG11c3QgYmUgZ2l2ZW4gYSBsYWJlbAp0aGF0IGlzIGlkZW50aWZpZWQgaW4gdGhlIGRpY3Rpb25hcnkgYnkgbmFtZSwgZS5nLjo6CgogICAgSW5kZXgoCiAgICAgICAgJ215X2luZGV4JywgbXlfdGFibGUuYy5pZCwKICAgICAgICBmdW5jLmxvd2VyKG15X3RhYmxlLmMuZGF0YSkubGFiZWwoJ2RhdGFfbG93ZXInKSwKICAgICAgICBwb3N0Z3Jlc3FsX29wcz17CiAgICAgICAgICAgICdkYXRhX2xvd2VyJzogJ3RleHRfcGF0dGVybl9vcHMnLAogICAgICAgICAgICAnaWQnOiAnaW50NF9vcHMnCiAgICAgICAgfSkKCgpJbmRleCBUeXBlcwpeXl5eXl5eXl5eXgoKUG9zdGdyZVNRTCBwcm92aWRlcyBzZXZlcmFsIGluZGV4IHR5cGVzOiBCLVRyZWUsIEhhc2gsIEdpU1QsIGFuZCBHSU4sIGFzIHdlbGwKYXMgdGhlIGFiaWxpdHkgZm9yIHVzZXJzIHRvIGNyZWF0ZSB0aGVpciBvd24gKHNlZQpodHRwOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvOC4zL3N0YXRpYy9pbmRleGVzLXR5cGVzLmh0bWwpLiBUaGVzZSBjYW4gYmUKc3BlY2lmaWVkIG9uIDpjbGFzczpgLkluZGV4YCB1c2luZyB0aGUgYGBwb3N0Z3Jlc3FsX3VzaW5nYGAga2V5d29yZCBhcmd1bWVudDo6CgogICAgSW5kZXgoJ215X2luZGV4JywgbXlfdGFibGUuYy5kYXRhLCBwb3N0Z3Jlc3FsX3VzaW5nPSdnaW4nKQoKVGhlIHZhbHVlIHBhc3NlZCB0byB0aGUga2V5d29yZCBhcmd1bWVudCB3aWxsIGJlIHNpbXBseSBwYXNzZWQgdGhyb3VnaCB0byB0aGUKdW5kZXJseWluZyBDUkVBVEUgSU5ERVggY29tbWFuZCwgc28gaXQgKm11c3QqIGJlIGEgdmFsaWQgaW5kZXggdHlwZSBmb3IgeW91cgp2ZXJzaW9uIG9mIFBvc3RncmVTUUwuCgouLiBfcG9zdGdyZXNxbF9pbmRleF9zdG9yYWdlOgoKSW5kZXggU3RvcmFnZSBQYXJhbWV0ZXJzCl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoKUG9zdGdyZVNRTCBhbGxvd3Mgc3RvcmFnZSBwYXJhbWV0ZXJzIHRvIGJlIHNldCBvbiBpbmRleGVzLiBUaGUgc3RvcmFnZQpwYXJhbWV0ZXJzIGF2YWlsYWJsZSBkZXBlbmQgb24gdGhlIGluZGV4IG1ldGhvZCB1c2VkIGJ5IHRoZSBpbmRleC4gU3RvcmFnZQpwYXJhbWV0ZXJzIGNhbiBiZSBzcGVjaWZpZWQgb24gOmNsYXNzOmAuSW5kZXhgIHVzaW5nIHRoZSBgYHBvc3RncmVzcWxfd2l0aGBgCmtleXdvcmQgYXJndW1lbnQ6OgoKICAgIEluZGV4KCdteV9pbmRleCcsIG15X3RhYmxlLmMuZGF0YSwgcG9zdGdyZXNxbF93aXRoPXsiZmlsbGZhY3RvciI6IDUwfSkKCi4uIHZlcnNpb25hZGRlZDo6IDEuMC42CgpQb3N0Z3JlU1FMIGFsbG93cyB0byBkZWZpbmUgdGhlIHRhYmxlc3BhY2UgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSBpbmRleC4KVGhlIHRhYmxlc3BhY2UgY2FuIGJlIHNwZWNpZmllZCBvbiA6Y2xhc3M6YC5JbmRleGAgdXNpbmcgdGhlCmBgcG9zdGdyZXNxbF90YWJsZXNwYWNlYGAga2V5d29yZCBhcmd1bWVudDo6CgogICAgSW5kZXgoJ215X2luZGV4JywgbXlfdGFibGUuYy5kYXRhLCBwb3N0Z3Jlc3FsX3RhYmxlc3BhY2U9J215X3RhYmxlc3BhY2UnKQoKLi4gdmVyc2lvbmFkZGVkOjogMS4xCgpOb3RlIHRoYXQgdGhlIHNhbWUgb3B0aW9uIGlzIGF2YWlsYWJsZSBvbiA6Y2xhc3M6YC5UYWJsZWAgYXMgd2VsbC4KCi4uIF9wb3N0Z3Jlc3FsX2luZGV4X2NvbmN1cnJlbnRseToKCkluZGV4ZXMgd2l0aCBDT05DVVJSRU5UTFkKXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoKVGhlIFBvc3RncmVTUUwgaW5kZXggb3B0aW9uIENPTkNVUlJFTlRMWSBpcyBzdXBwb3J0ZWQgYnkgcGFzc2luZyB0aGUKZmxhZyBgYHBvc3RncmVzcWxfY29uY3VycmVudGx5YGAgdG8gdGhlIDpjbGFzczpgLkluZGV4YCBjb25zdHJ1Y3Q6OgoKICAgIHRibCA9IFRhYmxlKCd0ZXN0dGJsJywgbSwgQ29sdW1uKCdkYXRhJywgSW50ZWdlcikpCgogICAgaWR4MSA9IEluZGV4KCd0ZXN0X2lkeDEnLCB0YmwuYy5kYXRhLCBwb3N0Z3Jlc3FsX2NvbmN1cnJlbnRseT1UcnVlKQoKVGhlIGFib3ZlIGluZGV4IGNvbnN0cnVjdCB3aWxsIHJlbmRlciBEREwgZm9yIENSRUFURSBJTkRFWCwgYXNzdW1pbmcKUG9zdGdyZVNRTCA4LjIgb3IgaGlnaGVyIGlzIGRldGVjdGVkIG9yIGZvciBhIGNvbm5lY3Rpb24tbGVzcyBkaWFsZWN0LCBhczo6CgogICAgQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSB0ZXN0X2lkeDEgT04gdGVzdHRibCAoZGF0YSkKCkZvciBEUk9QIElOREVYLCBhc3N1bWluZyBQb3N0Z3JlU1FMIDkuMiBvciBoaWdoZXIgaXMgZGV0ZWN0ZWQgb3IgZm9yCmEgY29ubmVjdGlvbi1sZXNzIGRpYWxlY3QsIGl0IHdpbGwgZW1pdDo6CgogICAgRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgdGVzdF9pZHgxCgouLiB2ZXJzaW9uYWRkZWQ6OiAxLjEgc3VwcG9ydCBmb3IgQ09OQ1VSUkVOVExZIG9uIERST1AgSU5ERVguICBUaGUKICAgQ09OQ1VSUkVOVExZIGtleXdvcmQgaXMgbm93IG9ubHkgZW1pdHRlZCBpZiBhIGhpZ2ggZW5vdWdoIHZlcnNpb24KICAgb2YgUG9zdGdyZVNRTCBpcyBkZXRlY3RlZCBvbiB0aGUgY29ubmVjdGlvbiAob3IgZm9yIGEgY29ubmVjdGlvbi1sZXNzCiAgIGRpYWxlY3QpLgoKV2hlbiB1c2luZyBDT05DVVJSRU5UTFksIHRoZSBQb3N0Z3JlU1FMIGRhdGFiYXNlIHJlcXVpcmVzIHRoYXQgdGhlIHN0YXRlbWVudApiZSBpbnZva2VkIG91dHNpZGUgb2YgYSB0cmFuc2FjdGlvbiBibG9jay4gICBUaGUgUHl0aG9uIERCQVBJIGVuZm9yY2VzIHRoYXQKZXZlbiBmb3IgYSBzaW5nbGUgc3RhdGVtZW50LCBhIHRyYW5zYWN0aW9uIGlzIHByZXNlbnQsIHNvIHRvIHVzZSB0aGlzCmNvbnN0cnVjdCwgdGhlIERCQVBJJ3MgImF1dG9jb21taXQiIG1vZGUgbXVzdCBiZSB1c2VkOjoKCiAgICBtZXRhZGF0YSA9IE1ldGFEYXRhKCkKICAgIHRhYmxlID0gVGFibGUoCiAgICAgICAgImZvbyIsIG1ldGFkYXRhLAogICAgICAgIENvbHVtbigiaWQiLCBTdHJpbmcpKQogICAgaW5kZXggPSBJbmRleCgKICAgICAgICAiZm9vX2lkeCIsIHRhYmxlLmMuaWQsIHBvc3RncmVzcWxfY29uY3VycmVudGx5PVRydWUpCgogICAgd2l0aCBlbmdpbmUuY29ubmVjdCgpIGFzIGNvbm46CiAgICAgICAgd2l0aCBjb25uLmV4ZWN1dGlvbl9vcHRpb25zKGlzb2xhdGlvbl9sZXZlbD0nQVVUT0NPTU1JVCcpOgogICAgICAgICAgICB0YWJsZS5jcmVhdGUoY29ubikKCi4uIHNlZWFsc286OgoKICAgIDpyZWY6YHBvc3RncmVzcWxfaXNvbGF0aW9uX2xldmVsYAoKLi4gX3Bvc3RncmVzcWxfaW5kZXhfcmVmbGVjdGlvbjoKClBvc3RncmVTUUwgSW5kZXggUmVmbGVjdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNyZWF0ZXMgYSBVTklRVUUgSU5ERVggaW1wbGljaXRseSB3aGVuZXZlciB0aGUKVU5JUVVFIENPTlNUUkFJTlQgY29uc3RydWN0IGlzIHVzZWQuICAgV2hlbiBpbnNwZWN0aW5nIGEgdGFibGUgdXNpbmcKOmNsYXNzOmAuSW5zcGVjdG9yYCwgdGhlIDptZXRoOmAuSW5zcGVjdG9yLmdldF9pbmRleGVzYAphbmQgdGhlIDptZXRoOmAuSW5zcGVjdG9yLmdldF91bmlxdWVfY29uc3RyYWludHNgIHdpbGwgcmVwb3J0IG9uIHRoZXNlCnR3byBjb25zdHJ1Y3RzIGRpc3RpbmN0bHk7IGluIHRoZSBjYXNlIG9mIHRoZSBpbmRleCwgdGhlIGtleQpgYGR1cGxpY2F0ZXNfY29uc3RyYWludGBgIHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgaW5kZXggZW50cnkgaWYgaXQgaXMKZGV0ZWN0ZWQgYXMgbWlycm9yaW5nIGEgY29uc3RyYWludC4gICBXaGVuIHBlcmZvcm1pbmcgcmVmbGVjdGlvbiB1c2luZwpgYFRhYmxlKC4uLiwgYXV0b2xvYWQ9VHJ1ZSlgYCwgdGhlIFVOSVFVRSBJTkRFWCBpcyAqKm5vdCoqIHJldHVybmVkCmluIDphdHRyOmAuVGFibGUuaW5kZXhlc2Agd2hlbiBpdCBpcyBkZXRlY3RlZCBhcyBtaXJyb3JpbmcgYQo6Y2xhc3M6YC5VbmlxdWVDb25zdHJhaW50YCBpbiB0aGUgOmF0dHI6YC5UYWJsZS5jb25zdHJhaW50c2AgY29sbGVjdGlvbi4KCi4uIHZlcnNpb25jaGFuZ2VkOjogMS4wLjAgLSA6Y2xhc3M6YC5UYWJsZWAgcmVmbGVjdGlvbiBub3cgaW5jbHVkZXMKICAgOmNsYXNzOmAuVW5pcXVlQ29uc3RyYWludGAgb2JqZWN0cyBwcmVzZW50IGluIHRoZSA6YXR0cjpgLlRhYmxlLmNvbnN0cmFpbnRzYAogICBjb2xsZWN0aW9uOyB0aGUgUG9zdGdyZVNRTCBiYWNrZW5kIHdpbGwgbm8gbG9uZ2VyIGluY2x1ZGUgYSAibWlycm9yZWQiCiAgIDpjbGFzczpgLkluZGV4YCBjb25zdHJ1Y3QgaW4gOmF0dHI6YC5UYWJsZS5pbmRleGVzYCBpZiBpdCBpcyBkZXRlY3RlZAogICBhcyBjb3JyZXNwb25kaW5nIHRvIGEgdW5pcXVlIGNvbnN0cmFpbnQuCgpTcGVjaWFsIFJlZmxlY3Rpb24gT3B0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIDpjbGFzczpgLkluc3BlY3RvcmAgdXNlZCBmb3IgdGhlIFBvc3RncmVTUUwgYmFja2VuZCBpcyBhbiBpbnN0YW5jZQpvZiA6Y2xhc3M6YC5QR0luc3BlY3RvcmAsIHdoaWNoIG9mZmVycyBhZGRpdGlvbmFsIG1ldGhvZHM6OgoKICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgY3JlYXRlX2VuZ2luZSwgaW5zcGVjdAoKICAgIGVuZ2luZSA9IGNyZWF0ZV9lbmdpbmUoInBvc3RncmVzcWwrcHN5Y29wZzI6Ly9sb2NhbGhvc3QvdGVzdCIpCiAgICBpbnNwID0gaW5zcGVjdChlbmdpbmUpICAjIHdpbGwgYmUgYSBQR0luc3BlY3RvcgoKICAgIHByaW50KGluc3AuZ2V0X2VudW1zKCkpCgouLiBhdXRvY2xhc3M6OiBQR0luc3BlY3RvcgogICAgOm1lbWJlcnM6CgouLiBfcG9zdGdyZXNxbF90YWJsZV9vcHRpb25zOgoKUG9zdGdyZVNRTCBUYWJsZSBPcHRpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKU2V2ZXJhbCBvcHRpb25zIGZvciBDUkVBVEUgVEFCTEUgYXJlIHN1cHBvcnRlZCBkaXJlY3RseSBieSB0aGUgUG9zdGdyZVNRTApkaWFsZWN0IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIDpjbGFzczpgLlRhYmxlYCBjb25zdHJ1Y3Q6CgoqIGBgVEFCTEVTUEFDRWBgOjoKCiAgICBUYWJsZSgic29tZV90YWJsZSIsIG1ldGFkYXRhLCAuLi4sIHBvc3RncmVzcWxfdGFibGVzcGFjZT0nc29tZV90YWJsZXNwYWNlJykKCiAgVGhlIGFib3ZlIG9wdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBvbiB0aGUgOmNsYXNzOmAuSW5kZXhgIGNvbnN0cnVjdC4KCiogYGBPTiBDT01NSVRgYDo6CgogICAgVGFibGUoInNvbWVfdGFibGUiLCBtZXRhZGF0YSwgLi4uLCBwb3N0Z3Jlc3FsX29uX2NvbW1pdD0nUFJFU0VSVkUgUk9XUycpCgoqIGBgV0lUSCBPSURTYGA6OgoKICAgIFRhYmxlKCJzb21lX3RhYmxlIiwgbWV0YWRhdGEsIC4uLiwgcG9zdGdyZXNxbF93aXRoX29pZHM9VHJ1ZSkKCiogYGBXSVRIT1VUIE9JRFNgYDo6CgogICAgVGFibGUoInNvbWVfdGFibGUiLCBtZXRhZGF0YSwgLi4uLCBwb3N0Z3Jlc3FsX3dpdGhfb2lkcz1GYWxzZSkKCiogYGBJTkhFUklUU2BgOjoKCiAgICBUYWJsZSgic29tZV90YWJsZSIsIG1ldGFkYXRhLCAuLi4sIHBvc3RncmVzcWxfaW5oZXJpdHM9InNvbWVfc3VwZXJ0YWJsZSIpCgogICAgVGFibGUoInNvbWVfdGFibGUiLCBtZXRhZGF0YSwgLi4uLCBwb3N0Z3Jlc3FsX2luaGVyaXRzPSgidDEiLCAidDIiLCAuLi4pKQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMC4wCgoqIGBgUEFSVElUSU9OIEJZYGA6OgoKICAgIFRhYmxlKCJzb21lX3RhYmxlIiwgbWV0YWRhdGEsIC4uLiwKICAgICAgICAgIHBvc3RncmVzcWxfcGFydGl0aW9uX2J5PSdMSVNUIChwYXJ0X2NvbHVtbiknKQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMi42CgouLiBzZWVhbHNvOjoKCiAgICBgUG9zdGdyZVNRTCBDUkVBVEUgVEFCTEUgb3B0aW9ucwogICAgPGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3N0YXRpYy9zcWwtY3JlYXRldGFibGUuaHRtbD5gXwoKQVJSQVkgVHlwZXMKLS0tLS0tLS0tLS0KClRoZSBQb3N0Z3JlU1FMIGRpYWxlY3Qgc3VwcG9ydHMgYXJyYXlzLCBib3RoIGFzIG11bHRpZGltZW5zaW9uYWwgY29sdW1uIHR5cGVzCmFzIHdlbGwgYXMgYXJyYXkgbGl0ZXJhbHM6CgoqIDpjbGFzczpgLnBvc3RncmVzcWwuQVJSQVlgIC0gQVJSQVkgZGF0YXR5cGUKCiogOmNsYXNzOmAucG9zdGdyZXNxbC5hcnJheWAgLSBhcnJheSBsaXRlcmFsCgoqIDpmdW5jOmAucG9zdGdyZXNxbC5hcnJheV9hZ2dgIC0gQVJSQVlfQUdHIFNRTCBmdW5jdGlvbgoKKiA6Y2xhc3M6YC5wb3N0Z3Jlc3FsLmFnZ3JlZ2F0ZV9vcmRlcl9ieWAgLSBoZWxwZXIgZm9yIFBHJ3MgT1JERVIgQlkgYWdncmVnYXRlCiAgZnVuY3Rpb24gc3ludGF4LgoKSlNPTiBUeXBlcwotLS0tLS0tLS0tCgpUaGUgUG9zdGdyZVNRTCBkaWFsZWN0IHN1cHBvcnRzIGJvdGggSlNPTiBhbmQgSlNPTkIgZGF0YXR5cGVzLCBpbmNsdWRpbmcKcHN5Y29wZzIncyBuYXRpdmUgc3VwcG9ydCBhbmQgc3VwcG9ydCBmb3IgYWxsIG9mIFBvc3RncmVTUUwncyBzcGVjaWFsCm9wZXJhdG9yczoKCiogOmNsYXNzOmAucG9zdGdyZXNxbC5KU09OYAoKKiA6Y2xhc3M6YC5wb3N0Z3Jlc3FsLkpTT05CYAoKSFNUT1JFIFR5cGUKLS0tLS0tLS0tLS0KClRoZSBQb3N0Z3JlU1FMIEhTVE9SRSB0eXBlIGFzIHdlbGwgYXMgaHN0b3JlIGxpdGVyYWxzIGFyZSBzdXBwb3J0ZWQ6CgoqIDpjbGFzczpgLnBvc3RncmVzcWwuSFNUT1JFYCAtIEhTVE9SRSBkYXRhdHlwZQoKKiA6Y2xhc3M6YC5wb3N0Z3Jlc3FsLmhzdG9yZWAgLSBoc3RvcmUgbGl0ZXJhbAoKRU5VTSBUeXBlcwotLS0tLS0tLS0tCgpQb3N0Z3JlU1FMIGhhcyBhbiBpbmRlcGVuZGVudGx5IGNyZWF0YWJsZSBUWVBFIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkCnRvIGltcGxlbWVudCBhbiBlbnVtZXJhdGVkIHR5cGUuICAgVGhpcyBhcHByb2FjaCBpbnRyb2R1Y2VzIHNpZ25pZmljYW50CmNvbXBsZXhpdHkgb24gdGhlIFNRTEFsY2hlbXkgc2lkZSBpbiB0ZXJtcyBvZiB3aGVuIHRoaXMgdHlwZSBzaG91bGQgYmUKQ1JFQVRFRCBhbmQgRFJPUFBFRC4gICBUaGUgdHlwZSBvYmplY3QgaXMgYWxzbyBhbiBpbmRlcGVuZGVudGx5IHJlZmxlY3RhYmxlCmVudGl0eS4gICBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIHNob3VsZCBiZSBjb25zdWx0ZWQ6CgoqIDpjbGFzczpgLnBvc3RncmVzcWwuRU5VTWAgLSBEREwgYW5kIHR5cGluZyBzdXBwb3J0IGZvciBFTlVNLgoKKiA6bWV0aDpgLlBHSW5zcGVjdG9yLmdldF9lbnVtc2AgLSByZXRyaWV2ZSBhIGxpc3Rpbmcgb2YgY3VycmVudCBFTlVNIHR5cGVzCgoqIDptZXRoOmAucG9zdGdyZXNxbC5FTlVNLmNyZWF0ZWAgLCA6bWV0aDpgLnBvc3RncmVzcWwuRU5VTS5kcm9wYCAtIGluZGl2aWR1YWwKICBDUkVBVEUgYW5kIERST1AgY29tbWFuZHMgZm9yIEVOVU0uCgouLiBfcG9zdGdyZXNxbF9hcnJheV9vZl9lbnVtOgoKVXNpbmcgRU5VTSB3aXRoIEFSUkFZCl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoKVGhlIGNvbWJpbmF0aW9uIG9mIEVOVU0gYW5kIEFSUkFZIGlzIG5vdCBkaXJlY3RseSBzdXBwb3J0ZWQgYnkgYmFja2VuZApEQkFQSXMgYXQgdGhpcyB0aW1lLiAgIEluIG9yZGVyIHRvIHNlbmQgYW5kIHJlY2VpdmUgYW4gQVJSQVkgb2YgRU5VTSwKdXNlIHRoZSBmb2xsb3dpbmcgd29ya2Fyb3VuZCB0eXBlLCB3aGljaCBkZWNvcmF0ZXMgdGhlCjpjbGFzczpgLnBvc3RncmVzcWwuQVJSQVlgIGRhdGF0eXBlLgoKLi4gc291cmNlY29kZTo6IHB5dGhvbgoKICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgVHlwZURlY29yYXRvcgogICAgZnJvbSBzcWxhbGNoZW15LmRpYWxlY3RzLnBvc3RncmVzcWwgaW1wb3J0IEFSUkFZCgogICAgY2xhc3MgQXJyYXlPZkVudW0oVHlwZURlY29yYXRvcik6CiAgICAgICAgaW1wbCA9IEFSUkFZCgogICAgICAgIGRlZiBiaW5kX2V4cHJlc3Npb24oc2VsZiwgYmluZHZhbHVlKToKICAgICAgICAgICAgcmV0dXJuIHNhLmNhc3QoYmluZHZhbHVlLCBzZWxmKQoKICAgICAgICBkZWYgcmVzdWx0X3Byb2Nlc3NvcihzZWxmLCBkaWFsZWN0LCBjb2x0eXBlKToKICAgICAgICAgICAgc3VwZXJfcnAgPSBzdXBlcihBcnJheU9mRW51bSwgc2VsZikucmVzdWx0X3Byb2Nlc3NvcigKICAgICAgICAgICAgICAgIGRpYWxlY3QsIGNvbHR5cGUpCgogICAgICAgICAgICBkZWYgaGFuZGxlX3Jhd19zdHJpbmcodmFsdWUpOgogICAgICAgICAgICAgICAgaW5uZXIgPSByZS5tYXRjaChyIl57KC4qKX0kIiwgdmFsdWUpLmdyb3VwKDEpCiAgICAgICAgICAgICAgICByZXR1cm4gaW5uZXIuc3BsaXQoIiwiKSBpZiBpbm5lciBlbHNlIFtdCgogICAgICAgICAgICBkZWYgcHJvY2Vzcyh2YWx1ZSk6CiAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXJfcnAoaGFuZGxlX3Jhd19zdHJpbmcodmFsdWUpKQogICAgICAgICAgICByZXR1cm4gcHJvY2VzcwoKRS5nLjo6CgogICAgVGFibGUoCiAgICAgICAgJ215ZGF0YScsIG1ldGFkYXRhLAogICAgICAgIENvbHVtbignaWQnLCBJbnRlZ2VyLCBwcmltYXJ5X2tleT1UcnVlKSwKICAgICAgICBDb2x1bW4oJ2RhdGEnLCBBcnJheU9mRW51bShFTlVNKCdhJywgJ2IsICdjJywgbmFtZT0nbXllbnVtJykpKQoKICAgICkKClRoaXMgdHlwZSBpcyBub3QgaW5jbHVkZWQgYXMgYSBidWlsdC1pbiB0eXBlIGFzIGl0IHdvdWxkIGJlIGluY29tcGF0aWJsZQp3aXRoIGEgREJBUEkgdGhhdCBzdWRkZW5seSBkZWNpZGVzIHRvIHN1cHBvcnQgQVJSQVkgb2YgRU5VTSBkaXJlY3RseSBpbgphIG5ldyB2ZXJzaW9uLgoKLi4gX3Bvc3RncmVzcWxfYXJyYXlfb2ZfanNvbjoKClVzaW5nIEpTT04vSlNPTkIgd2l0aCBBUlJBWQpeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KClNpbWlsYXIgdG8gdXNpbmcgRU5VTSwgZm9yIGFuIEFSUkFZIG9mIEpTT04vSlNPTkIgd2UgbmVlZCB0byByZW5kZXIgdGhlCmFwcHJvcHJpYXRlIENBU1QsIGhvd2V2ZXIgY3VycmVudCBwc3ljb3BnMiBkcml2ZXJzIHNlZW0gdG8gaGFuZGxlIHRoZSByZXN1bHQKZm9yIEFSUkFZIG9mIEpTT04gYXV0b21hdGljYWxseSwgc28gdGhlIHR5cGUgaXMgc2ltcGxlcjo6CgoKICAgIGNsYXNzIENhc3RpbmdBcnJheShBUlJBWSk6CiAgICAgICAgZGVmIGJpbmRfZXhwcmVzc2lvbihzZWxmLCBiaW5kdmFsdWUpOgogICAgICAgICAgICByZXR1cm4gc2EuY2FzdChiaW5kdmFsdWUsIHNlbGYpCgpFLmcuOjoKCiAgICBUYWJsZSgKICAgICAgICAnbXlkYXRhJywgbWV0YWRhdGEsCiAgICAgICAgQ29sdW1uKCdpZCcsIEludGVnZXIsIHByaW1hcnlfa2V5PVRydWUpLAogICAgICAgIENvbHVtbignZGF0YScsIENhc3RpbmdBcnJheShKU09OQikpCiAgICApCgoK6QAAAAApAdoLZGVmYXVsdGRpY3RO6QMAAAApAdoDZXhjKQHaBnNjaGVtYSkB2gNzcWwpAdoEdXRpbCkB2gdkZWZhdWx0KQHaCnJlZmxlY3Rpb24pAdoIY29tcGlsZXIpAdoIZWxlbWVudHMpAdoKZXhwcmVzc2lvbikB2ghzcWx0eXBlcykB2gZCSUdJTlQpAdoHQk9PTEVBTikB2gRDSEFSKQHaBERBVEUpAdoFRkxPQVQpAdoHSU5URUdFUikB2gdOVU1FUklDKQHaBFJFQUwpAdoIU01BTExJTlQpAdoEVEVYVCkB2gdWQVJDSEFSKQHaBFVVSUR6IF4oPzpidHJlZXxoYXNofGdpc3R8Z2lufFtcd19dKykkenNccyooPzpVUERBVEV8SU5TRVJUfENSRUFURXxERUxFVEV8RFJPUHxBTFRFUnxHUkFOVHxSRVZPS0V8SU1QT1JUIEZPUkVJR04gU0NIRU1BfFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVd8VFJVTkNBVEUp2gNhbGxaB2FuYWx5c2VaB2FuYWx5emXaA2FuZNoDYW552gVhcnJhedoCYXNaA2FzY1oKYXN5bW1ldHJpY1oEYm90aNoEY2FzZdoEY2FzdNoFY2hlY2vaB2NvbGxhdGXaBmNvbHVtbtoKY29uc3RyYWludNoGY3JlYXRlWg9jdXJyZW50X2NhdGFsb2daDGN1cnJlbnRfZGF0ZVoMY3VycmVudF9yb2xlWgxjdXJyZW50X3RpbWVaEWN1cnJlbnRfdGltZXN0YW1wWgxjdXJyZW50X3VzZXJyCAAAANoKZGVmZXJyYWJsZdoEZGVzY1oIZGlzdGluY3RaAmRv2gRlbHNl2gNlbmTaBmV4Y2VwdNoFZmFsc2VaBWZldGNo2gNmb3JaB2ZvcmVpZ27aBGZyb21aBWdyYW502gVncm91cFoGaGF2aW5n2gJpbtoJaW5pdGlhbGx5WglpbnRlcnNlY3RaBGludG9aB2xlYWRpbmfaBWxpbWl02glsb2NhbHRpbWVaDmxvY2FsdGltZXN0YW1w2gNuZXfaA25vdNoEbnVsbNoCb2baA29mZtoGb2Zmc2V02gNvbGTaAm9u2gRvbmx52gJvctoFb3JkZXJaB3BsYWNpbmdaB3ByaW1hcnlaCnJlZmVyZW5jZXNaCXJldHVybmluZ9oGc2VsZWN0WgxzZXNzaW9uX3VzZXJaBHNvbWVaCXN5bW1ldHJpY9oFdGFibGVaBHRoZW7aAnRvWgh0cmFpbGluZ9oEdHJ1ZdoFdW5pb27aBnVuaXF1ZdoEdXNlctoFdXNpbmdaCHZhcmlhZGljWgR3aGVu2gV3aGVyZdoGd2luZG932gR3aXRoWg1hdXRob3JpemF0aW9uWgdiZXR3ZWVu2gZiaW5hcnlaBWNyb3NzWg5jdXJyZW50X3NjaGVtYVoGZnJlZXpl2gRmdWxsWgVpbGlrZdoFaW5uZXLaAmlzWgZpc251bGzaBGpvaW7aBGxlZnRaBGxpa2VaB25hdHVyYWzaB25vdG51bGxaBW91dGVyWgRvdmVyWghvdmVybGFwc9oFcmlnaHRa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TlVNYAogICAgaW4gYW4gImlubGluZSIgZmFzaGlvbiwgdGhlIGBgQ1JFQVRFIFRZUEVgYCBhbmQgYGBEUk9QIFRZUEVgYCBpcyBlbWl0dGVkCiAgICBjb3JyZXNwb25kaW5nIHRvIHdoZW4gdGhlIDptZXRoOmAuVGFibGUuY3JlYXRlYCBhbmQgOm1ldGg6YC5UYWJsZS5kcm9wYAogICAgbWV0aG9kcyBhcmUgY2FsbGVkOjoKCiAgICAgICAgdGFibGUgPSBUYWJsZSgnc29tZXRhYmxlJywgbWV0YWRhdGEsCiAgICAgICAgICAgIENvbHVtbignc29tZV9lbnVtJywgRU5VTSgnYScsICdiJywgJ2MnLCBuYW1lPSdteWVudW0nKSkKICAgICAgICApCgogICAgICAgIHRhYmxlLmNyZWF0ZShlbmdpbmUpICAjIHdpbGwgZW1pdCBDUkVBVEUgRU5VTSBhbmQgQ1JFQVRFIFRBQkxFCiAgICAgICAgdGFibGUuZHJvcChlbmdpbmUpICAjIHdpbGwgZW1pdCBEUk9QIFRBQkxFIGFuZCBEUk9QIEVOVU0KCiAgICBUbyB1c2UgYSBjb21tb24gZW51bWVyYXRlZCB0eXBlIGJldHdlZW4gbXVsdGlwbGUgdGFibGVzLCB0aGUgYmVzdAogICAgcHJhY3RpY2UgaXMgdG8gZGVjbGFyZSB0aGUgOmNsYXNzOmAudHlwZXMuRW51bWAgb3IKICAgIDpjbGFzczpgLnBvc3RncmVzcWwuRU5VTWAgaW5kZXBlbmRlbnRseSwgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIHRoZQogICAgOmNsYXNzOmAuTWV0YURhdGFgIG9iamVjdCBpdHNlbGY6OgoKICAgICAgICBteV9lbnVtID0gRU5VTSgnYScsICdiJywgJ2MnLCBuYW1lPSdteWVudW0nLCBtZXRhZGF0YT1tZXRhZGF0YSkKCiAgICAgICAgdDEgPSBUYWJsZSgnc29tZXRhYmxlX29uZScsIG1ldGFkYXRhLAogICAgICAgICAgICBDb2x1bW4oJ3NvbWVfZW51bScsIG15ZW51bSkKICAgICAgICApCgogICAgICAgIHQyID0gVGFibGUoJ3NvbWV0YWJsZV90d28nLCBtZXRhZGF0YSwKICAgICAgICAgICAgQ29sdW1uKCdzb21lX2VudW0nLCBteWVudW0pCiAgICAgICAgKQoKICAgIFdoZW4gdGhpcyBwYXR0ZXJuIGlzIHVzZWQsIGNhcmUgbXVzdCBzdGlsbCBiZSB0YWtlbiBhdCB0aGUgbGV2ZWwKICAgIG9mIGluZGl2aWR1YWwgdGFibGUgY3JlYXRlcy4gIEVtaXR0aW5nIENSRUFURSBUQUJMRSB3aXRob3V0IGFsc28KICAgIHNwZWNpZnlpbmcgYGBjaGVja2ZpcnN0PVRydWVgYCB3aWxsIHN0aWxsIGNhdXNlIGlzc3Vlczo6CgogICAgICAgIHQxLmNyZWF0ZShlbmdpbmUpICMgd2lsbCBmYWlsOiBubyBzdWNoIHR5cGUgJ215ZW51bScKCiAgICBJZiB3ZSBzcGVjaWZ5IGBgY2hlY2tmaXJzdD1UcnVlYGAsIHRoZSBpbmRpdmlkdWFsIHRhYmxlLWxldmVsIGNyZWF0ZQogICAgb3BlcmF0aW9uIHdpbGwgY2hlY2sgZm9yIHRoZSBgYEVOVU1gYCBhbmQgY3JlYXRlIGlmIG5vdCBleGlzdHM6OgoKICAgICAgICAjIHdpbGwgY2hlY2sgaWYgZW51bSBleGlzdHMsIGFuZCBlbWl0IENSRUFURSBUWVBFIGlmIG5vdAogICAgICAgIHQxLmNyZWF0ZShlbmdpbmUsIGNoZWNrZmlyc3Q9VHJ1ZSkKCiAgICBXaGVuIHVzaW5nIGEgbWV0YWRhdGEtbGV2ZWwgRU5VTSB0eXBlLCB0aGUgdHlwZSB3aWxsIGFsd2F5cyBiZSBjcmVhdGVkCiAgICBhbmQgZHJvcHBlZCBpZiBlaXRoZXIgdGhlIG1ldGFkYXRhLXdpZGUgY3JlYXRlL2Ryb3AgaXMgY2FsbGVkOjoKCiAgICAgICAgbWV0YWRhdGEuY3JlYXRlX2FsbChlbmdpbmUpICAjIHdpbGwgZW1pdCBDUkVBVEUgVFlQRQogICAgICAgIG1ldGFkYXRhLmRyb3BfYWxsKGVuZ2luZSkgICMgd2lsbCBlbWl0IERST1AgVFlQRQoKICAgIFRoZSB0eXBlIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGRyb3BwZWQgZGlyZWN0bHk6OgoKICAgICAgICBteV9lbnVtLmNyZWF0ZShlbmdpbmUpCiAgICAgICAgbXlfZW51bS5kcm9wKGVuZ2luZSkKCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDEuMC4wIFRoZSBQb3N0Z3JlU1FMIDpjbGFzczpgLnBvc3RncmVzcWwuRU5VTWAgdHlwZQogICAgICAgbm93IGJlaGF2ZXMgbW9yZSBzdHJpY3RseSB3aXRoIHJlZ2FyZHMgdG8gQ1JFQVRFL0RST1AuICBBIG1ldGFkYXRhLWxldmVsCiAgICAgICBFTlVNIHR5cGUgd2lsbCBvbmx5IGJlIGNyZWF0ZWQgYW5kIGRyb3BwZWQgYXQgdGhlIG1ldGFkYXRhIGxldmVsLAogICAgICAgbm90IHRoZSB0YWJsZSBsZXZlbCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCiAgICAgICBgYHRhYmxlLmNyZWF0ZShjaGVja2ZpcnN0PVRydWUpYGAuCiAgICAgICBUaGUgYGB0YWJsZS5kcm9wKClgYCBjYWxsIHdpbGwgbm93IGVtaXQgYSBEUk9QIFRZUEUgZm9yIGEgdGFibGUtbGV2ZWwKICAgICAgIGVudW1lcmF0ZWQgdHlwZS4KCiAgICBUYwEAAAAAAAAAAwAAAAQAAAAPAAAAcyQAAAB8AqAAZAFkAqECfABfAXQCdAN8AIMCagR8AXwCjgEBAGQDUwApBGEEBAAAQ29uc3RydWN0IGFuIDpjbGFzczpgfi5wb3N0Z3Jlc3FsLkVOVU1gLgoKICAgICAgICBBcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHRoYXQgb2YKICAgICAgICA6Y2xhc3M6YC50eXBlcy5FbnVtYCwgYnV0IGFsc28gaW5jbHVkaW5nCiAgICAgICAgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzLgoKICAgICAgICA6cGFyYW0gY3JlYXRlX3R5cGU6IERlZmF1bHRzIHRvIFRydWUuCiAgICAgICAgIEluZGljYXRlcyB0aGF0IGBgQ1JFQVRFIFRZUEVgYCBzaG91bGQgYmUKICAgICAgICAgZW1pdHRlZCwgYWZ0ZXIgb3B0aW9uYWxseSBjaGVja2luZyBmb3IgdGhlCiAgICAgICAgIHByZXNlbmNlIG9mIHRoZSB0eXBlLCB3aGVuIHRoZSBwYXJlbnQKICAgICAgICAgdGFibGUgaXMgYmVpbmcgY3JlYXRlZDsgYW5kIGFkZGl0aW9uYWxseQogICAgICAgICB0aGF0IGBgRFJPUCBUWVBFYGAgaXMgY2FsbGVkIHdoZW4gdGhlIHRhYmxlCiAgICAgICAgIGlzIGRyb3BwZWQuICAgIFdoZW4gYGBGYWxzZWBgLCBubyBjaGVjawogICAgICAgICB3aWxsIGJlIHBlcmZvcm1lZCBhbmQgbm8gYGBDUkVBVEUgVFlQRWBgCiAgICAgICAgIG9yIGBgRFJPUCBUWVBFYGAgaXMgZW1pdHRlZCwgdW5sZXNzCiAgICAgICAgIDptZXRoOmB+LnBvc3RncmVzcWwuRU5VTS5jcmVhdGVgCiAgICAgICAgIG9yIDptZXRoOmB+LnBvc3RncmVzcWwuRU5VTS5kcm9wYAogICAgICAgICBhcmUgY2FsbGVkIGRpcmVjdGx5LgogICAgICAgICBTZXR0aW5nIHRvIGBgRmFsc2VgYCBpcyBoZWxwZnVsCiAgICAgICAgIHdoZW4gaW52b2tpbmcgYSBjcmVhdGlvbiBzY2hlbWUgdG8gYSBTUUwgZmlsZQogICAgICAgICB3aXRob3V0IGFjY2VzcyB0byB0aGUgYWN0dWFsIGRhdGFiYXNlIC0KICAgICAgICAgdGhlIDptZXRoOmB+LnBvc3RncmVzcWwuRU5VTS5jcmVhdGVgIGFuZAogICAgICAgICA6bWV0aDpgfi5wb3N0Z3Jlc3FsLkVOVU0uZHJvcGAgbWV0aG9kcyBjYW4KICAgICAgICAgYmUgdXNlZCB0byBlbWl0IFNRTCB0byBhIHRhcmdldCBiaW5kLgoKICAgICAgICDaC2NyZWF0ZV90eXBlVE4pBdoDcG9wcosAAAByZwAAAHKKAAAAcmgAAAApA3JqAAAA2gVlbnVtc3JyAAAAKQFyawAAAHJbAAAAclwAAAByaAAAAFkFAABzBAAAAAAbDgF6DUVOVU0uX19pbml0X19jAgAAAAAAAAADAAAABAAAAEsAAABzagAAAHwCoABkAXwBagGhAgEAfAKgAGQCfAFqAqECAQB8AqAAZAN8AWoDoQIBAHwCoABkBHwBagShAgEAfAKgAGQFfAFqBaECAQB8AqAAZAZkB6ECAQB8AqAAZAh8AWoGoQIBAHwAZgB8Ao4BUwApCXpiUHJvZHVjZSBhIFBvc3RncmVTUUwgbmF0aXZlIDpjbGFzczpgLnBvc3RncmVzcWwuRU5VTWAgZnJvbSBwbGFpbgogICAgICAgIDpjbGFzczpgLkVudW1gLgoKICAgICAgICDaEHZhbGlkYXRlX3N0cmluZ3PaBG5hbWVyBQAAANoOaW5oZXJpdF9zY2hlbWHaCG1ldGFkYXRhWg5fY3JlYXRlX2V2ZW50c0baD3ZhbHVlc19jYWxsYWJsZSkH2gpzZXRkZWZhdWx0co4AAAByjwAAAHIFAAAAcpAAAABykQAAAHKSAAAAKQNycAAAANoEaW1wbHJyAAAAclsAAAByWwAAAHJcAAAAcnMAAAB3BQAAcxAAAAAABg4BDgEOAQ4BDgEMAQ4Beh1FTlVNLmFkYXB0X2VtdWxhdGVkX3RvX25hdGl2ZU5jAwAAAAAAAAADAAAABQAAAEMAAABzOAAAAHwBagBqAXMMZAFTAHwCciZ8AWoAagJ8AXwAagN8AGoEZAKNA3M0fAGgBXQGfACDAaEBAQBkAVMAKQNh5QEAAEVtaXQgYGBDUkVBVEUgVFlQRWBgIGZvciB0aGlzCiAgICAgICAgOmNsYXNzOmB+LnBvc3RncmVzcWwuRU5VTWAuCgogICAgICAgIElmIHRoZSB1bmRlcmx5aW5nIGRpYWxlY3QgZG9lcyBub3Qgc3VwcG9ydAogICAgICAgIFBvc3RncmVTUUwgQ1JFQVRFIFRZUEUsIG5vIGFjdGlvbiBpcyB0YWtlbi4KCiAgICAgICAgOnBhcmFtIGJpbmQ6IGEgY29ubmVjdGFibGUgOmNsYXNzOmAuRW5naW5lYCwKICAgICAgICAgOmNsYXNzOmAuQ29ubmVjdGlvbmAsIG9yIHNpbWlsYXIgb2JqZWN0IHRvIGVtaXQKICAgICAgICAgU1FMLgogICAgICAgIDpwYXJhbSBjaGVja2ZpcnN0OiBpZiBgYFRydWVgYCwgYSBxdWVyeSBhZ2FpbnN0CiAgICAgICAgIHRoZSBQRyBjYXRhbG9nIHdpbGwgYmUgZmlyc3QgcGVyZm9ybWVkIHRvIHNlZQogICAgICAgICBpZiB0aGUgdHlwZSBkb2VzIG5vdCBleGlzdCBhbHJlYWR5IGJlZm9yZQogICAgICAgICBjcmVhdGluZy4KCiAgICAgICAgTikBcgUAAAApB3KFAAAA2hRzdXBwb3J0c19uYXRpdmVfZW51bdoIaGFzX3R5cGVyjwAAAHIFAAAA2gdleGVjdXRl2g5DcmVhdGVFbnVtVHlwZSkDcmoAAADaBGJpbmTaCmNoZWNrZmlyc3RyWwAAAHJbAAAAclwAAAByJQAAAIYFAABzCgAAAAAQCAEEAgoBEAJ6C0VOVU0uY3JlYXRlYwMAAAAAAAAAAwAAAAUAAABDAAAAczgAAAB8AWoAagFzDGQBUwB8AnImfAFqAGoCfAF8AGoDfABqBGQCjQNyNHwBoAV0BnwAgwGhAQEAZAFTACkDYdEBAABFbWl0IGBgRFJPUCBUWVBFYGAgZm9yIHRoaXMKICAgICAgICA6Y2xhc3M6YH4ucG9zdGdyZXNxbC5FTlVNYC4KCiAgICAgICAgSWYgdGhlIHVuZGVybHlpbmcgZGlhbGVjdCBkb2VzIG5vdCBzdXBwb3J0CiAgICAgICAgUG9zdGdyZVNRTCBEUk9QIFRZUEUsIG5vIGFjdGlvbiBpcyB0YWtlbi4KCiAgICAgICAgOnBhcmFtIGJpbmQ6IGEgY29ubmVjdGFibGUgOmNsYXNzOmAuRW5naW5lYCwKICAgICAgICAgOmNsYXNzOmAuQ29ubmVjdGlvbmAsIG9yIHNpbWlsYXIgb2JqZWN0IHRvIGVtaXQKICAgICAgICAgU1FMLgogICAgICAgIDpwYXJhbSBjaGVja2ZpcnN0OiBpZiBgYFRydWVgYCwgYSBxdWVyeSBhZ2FpbnN0CiAgICAgICAgIHRoZSBQRyBjYXRhbG9nIHdpbGwgYmUgZmlyc3QgcGVyZm9ybWVkIHRvIHNlZQogICAgICAgICBpZiB0aGUgdHlwZSBhY3R1YWxseSBleGlzdHMgYmVmb3JlIGRyb3BwaW5nLgoKICAgICAgICBOKQFyBQAAACkHcoUAAABylQAAAHKWAAAAco8AAAByBQAAAHKXAAAA2gxEcm9wRW51bVR5cGUpA3JqAAAAcpkAAABymgAAAHJbAAAAclsAAAByXAAAANoEZHJvcJ4FAABzCgAAAAAPCAEEAgoBEAJ6CUVOVU0uZHJvcGMDAAAAAAAAAAYAAAAEAAAAQwAAAHNuAAAAfABqAHMKZAFTAGQCfAJrBnJmfAJkAhkAfQNkA3wDagFrBnIwfANqAWQDGQB9BG4QdAKDAAQAfQR8A2oBZAM8AHwAagN8AGoEZgJ8BGsGfQV8BKAFfABqA3wAagRmAqEBAQB8BVMAZARTAGQFUwApBmEEAQAATG9vayBpbiB0aGUgJ2RkbCBydW5uZXInIGZvciAnbWVtb3MnLCB0aGVuCiAgICAgICAgbm90ZSBvdXIgbmFtZSBpbiB0aGF0IGNvbGxlY3Rpb24uCgogICAgICAgIFRoaXMgdG8gZW5zdXJlIGEgcGFydGljdWxhciBuYW1lZCBlbnVtIGlzIG9wZXJhdGVkCiAgICAgICAgdXBvbiBvbmx5IG9uY2Ugd2l0aGluIGFueSBraW5kIG9mIGNyZWF0ZS9kcm9wCiAgICAgICAgc2VxdWVuY2Ugd2l0aG91dCByZWx5aW5nIHVwb24gImNoZWNrZmlyc3QiLgoKICAgICAgICBUWgtfZGRsX3J1bm5lcloJX3BnX2VudW1zRk4pBnKLAAAA2gRtZW1v2gNzZXRyBQAAAHKPAAAA2gNhZGQpBnJqAAAAcpoAAABycgAAAFoKZGRsX3J1bm5lcloIcGdfZW51bXNaB3ByZXNlbnRyWwAAAHJbAAAAclwAAADaGF9jaGVja19mb3JfbmFtZV9pbl9tZW1vc7UFAABzFgAAAAAJBgEEAQgBCAEKAQwCEAEQARIBBAJ6HUVOVU0uX2NoZWNrX2Zvcl9uYW1lX2luX21lbW9zRmMEAAAAAAAAAAUAAAAEAAAASwAAAHM0AAAAfANzInwAagBzMHwEoAFkAWQCoQJzMHwAoAJ8A3wEoQJzMHwAagN8AnwDZAONAgEAZABTACkETtoWX2lzX21ldGFkYXRhX29wZXJhdGlvbkYpAnKZAAAAcpoAAAApBHKRAAAA2gNnZXRyoAAAAHIlAAAAKQVyagAAANoGdGFyZ2V0cpkAAABymgAAAHJyAAAAclsAAAByWwAAAHJcAAAA2hBfb25fdGFibGVfY3JlYXRlzAUAAHMKAAAAAAIEAgYBDAIMAnoVRU5VTS5fb25fdGFibGVfY3JlYXRlYwQAAAAAAAAABQAAAAQAAABLAAAAczAAAAB8AGoAcyx8BKABZAFkAqECcyx8AKACfAN8BKECcyx8AGoDfAJ8A2QDjQIBAGQAUwApBE5yoQAAAEYpAnKZAAAAcpoAAAApBHKRAAAAcqIAAAByoAAAAHKcAAAAKQVyagAAAHKjAAAAcpkAAABymgAAAHJyAAAAclsAAAByWwAAAHJcAAAA2g5fb25fdGFibGVfZHJvcNcFAABzCAAAAAACBgEMAQwCehNFTlVNLl9vbl90YWJsZV9kcm9wYwQAAAAAAAAABQAAAAQAAABLAAAAcx4AAAB8AKAAfAN8BKECcxp8AGoBfAJ8A2QBjQIBAGQAUwApAk4pAnKZAAAAcpoAAAApAnKgAAAAciUAAAApBXJqAAAAcqMAAABymQAAAHKaAAAAcnIAAAByWwAAAHJbAAAAclwAAADaE19vbl9tZXRhZGF0YV9jcmVhdGXfBQAAcwQAAAAAAQwBehhFTlVNLl9vbl9tZXRhZGF0YV9jcmVhdGVjBAAAAAAAAAAFAAAABAAAAEsAAABzHgAAAHwAoAB8A3wEoQJzGnwAagF8AnwDZAGNAgEAZABTACkCTikCcpkAAABymgAAACkCcqAAAABynAAAACkFcmoAAAByowAAAHKZAAAAcpoAAABycgAAAHJbAAAAclsAAAByXAAAANoRX29uX21ldGFkYXRhX2Ryb3DjBQAAcwQAAAAAAQwBehZFTlVNLl9vbl9tZXRhZGF0YV9kcm9wKQJOVCkCTlQpAUYpAUYpAUYpAUYpEHJXAAAAclgAAAByWQAAAHJiAAAA2gtuYXRpdmVfZW51bXJoAAAAcnkAAABycwAAAHIlAAAAcpwAAAByoAAAAHKkAAAAcqUAAABypgAAAHKnAAAAcmwAAAByWwAAAHJbAAAAKQFyawAAAHJcAAAAcooAAAAJBQAAcxYAAAAITAQCBAIMHgwPChgKFwgXCgsKCAoEcooAAAApINoHaW50ZWdlcloGYmlnaW50WghzbWFsbGludHoRY2hhcmFjdGVyIHZhcnlpbmfaCWNoYXJhY3RlcnoGImNoYXIico8AAADaBHRleHTaB251bWVyaWPaBWZsb2F02gRyZWFsWgRpbmV0WgRjaWRy2gR1dWlk2gNiaXR6C2JpdCB2YXJ5aW5nWgdtYWNhZGRyWgVtb25ledoDb2lkWghyZWdjbGFzc3oQZG91YmxlIHByZWNpc2lvbtoJdGltZXN0YW1wehh0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmV6G3RpbWVzdGFtcCB3aXRob3V0IHRpbWUgem9uZXoTdGltZSB3aXRoIHRpbWUgem9uZXoWdGltZSB3aXRob3V0IHRpbWUgem9uZdoEZGF0ZdoEdGltZVoFYnl0ZWFaB2Jvb2xlYW5ycQAAAFoIdHN2ZWN0b3JjAAAAAAAAAAAAAAAAAwAAAAAAAABzzAAAAGUAWgFkAFoCZAFkAoQAWgNkA2QEhABaBGQFZAaEAFoFZAdkCIQAWgZkCWQKhABaB2QLZAyEAFoIZA1kDoQAWglkD2QQhABaCmQRZBKEAFoLZBNkFIQAWgyHAGYBZBVkFoQIWg1kF2QYhABaDmQZZBqEAFoPZBtkHIQAWhBkHWQehABaEWQfZCCEAFoSZCFkIoQAWhNkI2QkhABaFGQlZCaEAFoVZCdkKIQAWhZkKWQqhABaF2QrZCyEAFoYZC1kLoQAWhmHAAQAWhpTACkv2gpQR0NvbXBpbGVyYwIAAAAAAAAAAwAAAAQAAABLAAAAcxIAAABkAXwAagB8AWYBfAKOARYAUwApAk56CUFSUkFZWyVzXSkBWhB2aXNpdF9jbGF1c2VsaXN0KQNyagAAANoHZWxlbWVudHJyAAAAclsAAAByWwAAAHJcAAAA2gt2aXNpdF9hcnJheQ8GAABzAgAAAAABehZQR0NvbXBpbGVyLnZpc2l0X2FycmF5YwIAAAAAAAAAAwAAAAUAAABLAAAAcyQAAABkAXwAagB8AWoBZgF8Ao4BfABqAHwBagJmAXwCjgFmAhYAUwApAk56BSVzOiVzKQNyhAAAANoFc3RhcnTaBHN0b3ApA3JqAAAAcrYAAABycgAAAHJbAAAAclsAAAByXAAAANoLdmlzaXRfc2xpY2USBgAAcwYAAAAAAQIBDgF6FlBHQ29tcGlsZXIudmlzaXRfc2xpY2VjAwAAAAAAAAAEAAAAAwAAAEsAAABzGAAAAGQBfANkAjwAfABqAHwBZANmAnwDjgFTACkETlTaDmVhZ2VyX2dyb3VwaW5negQgLT4gKQHaGF9nZW5lcmF0ZV9nZW5lcmljX2JpbmFyeSkEcmoAAABySQAAANoIb3BlcmF0b3JycgAAAHJbAAAAclsAAAByXAAAANocdmlzaXRfanNvbl9nZXRpdGVtX29wX2JpbmFyeRgGAABzBAAAAAABCAF6J1BHQ29tcGlsZXIudmlzaXRfanNvbl9nZXRpdGVtX29wX2JpbmFyeWMDAAAAAAAAAAQAAAADAAAASwAAAHMYAAAAZAF8A2QCPAB8AGoAfAFkA2YCfAOOAVMAKQROVHK7AAAAegQgIz4gKQFyvAAAACkEcmoAAABySQAAAHK9AAAAcnIAAAByWwAAAHJbAAAAclwAAADaIXZpc2l0X2pzb25fcGF0aF9nZXRpdGVtX29wX2JpbmFyeRwGAABzBAAAAAABCAF6LFBHQ29tcGlsZXIudmlzaXRfanNvbl9wYXRoX2dldGl0ZW1fb3BfYmluYXJ5YwMAAAAAAAAABAAAAAUAAABLAAAAcyQAAABkAXwAagB8AWoBZgF8A44BfABqAHwBagJmAXwDjgFmAhYAUwApAk56BiVzWyVzXSkDcoQAAAByTgAAAHJQAAAAKQRyagAAAHJJAAAAcr0AAABycgAAAHJbAAAAclsAAAByXAAAANoUdmlzaXRfZ2V0aXRlbV9iaW5hcnkgBgAAcwYAAAAAAQIBDgF6H1BHQ29tcGlsZXIudmlzaXRfZ2V0aXRlbV9iaW5hcnljAgAAAAAAAAADAAAABQAAAEsAAABzJAAAAGQBfABqAHwBagFmAXwCjgF8AGoAfAFqAmYBfAKOAWYCFgBTACkCTnoOJXMgT1JERVIgQlkgJXMpA3KEAAAAcqMAAABaCG9yZGVyX2J5KQNyagAAAHK2AAAAcnIAAAByWwAAAHJbAAAAclwAAADaGHZpc2l0X2FnZ3JlZ2F0ZV9vcmRlcl9ieSYGAABzBgAAAAABAgEOAXojUEdDb21waWxlci52aXNpdF9hZ2dyZWdhdGVfb3JkZXJfYnljAwAAAAAAAAAFAAAABgAAAEsAAABzbAAAAGQBfAFqAGsGckh8AKABfAFqAGQBGQB0AmoDoQJ9BHwEckhkAnwAagR8AWoFZgF8A44BfAR8AGoEfAFqBmYBfAOOAWYDFgBTAGQDfABqBHwBagVmAXwDjgF8AGoEfAFqBmYBfAOOAWYCFgBTACkETloUcG9zdGdyZXNxbF9yZWdjb25maWd6GCVzIEBAIHRvX3RzcXVlcnkoJXMsICVzKXoUJXMgQEAgdG9fdHNxdWVyeSglcykpB9oJbW9kaWZpZXJz2hRyZW5kZXJfbGl0ZXJhbF92YWx1ZXINAAAA2gpTVFJJTkdUWVBFcoQAAAByTgAAAHJQAAAAKQVyagAAAHJJAAAAcr0AAABycgAAAFoJcmVnY29uZmlnclsAAAByWwAAAHJcAAAA2hV2aXNpdF9tYXRjaF9vcF9iaW5hcnksBgAAcxYAAAAAAQoBBAEQAgQBAgEOAQIBFAICAQ4BeiBQR0NvbXBpbGVyLnZpc2l0X21hdGNoX29wX2JpbmFyeWMDAAAAAAAAAAUAAAAGAAAASwAAAHNMAAAAfAFqAKABZAFkAKECfQRkAnwAagJ8AWoDZgF8A44BfABqAnwBagRmAXwDjgFmAhYAfARyRmQDfACgBXwEdAZqB6ECFwBuAmQEFwBTACkFTtoGZXNjYXBlegslcyBJTElLRSAlc3oIIEVTQ0FQRSDaACkIcsIAAAByogAAAHKEAAAAck4AAAByUAAAAHLDAAAAcg0AAAByxAAAACkFcmoAAABySQAAAHK9AAAAcnIAAAByxgAAAHJbAAAAclsAAAByXAAAANoVdmlzaXRfaWxpa2Vfb3BfYmluYXJ5PAYAAHMMAAAAAAEOAgIBDgESAxYBeiBQR0NvbXBpbGVyLnZpc2l0X2lsaWtlX29wX2JpbmFyeWMDAAAAAAAAAAUAAAAGAAAASwAAAHNMAAAAfAFqAKABZAFkAKECfQRkAnwAagJ8AWoDZgF8A44BfABqAnwBagRmAXwDjgFmAhYAfARyRmQDfACgBXwEdAZqB6ECFwBuAmQEFwBTACkFTnLGAAAAeg8lcyBOT1QgSUxJS0UgJXN6CCBFU0NBUEUgcscAAAApCHLCAAAAcqIAAAByhAAAAHJOAAAAclAAAABywwAAAHINAAAAcsQAAAApBXJqAAAAckkAAAByvQAAAHJyAAAAcsYAAAByWwAAAHJbAAAAclwAAADaGHZpc2l0X25vdGlsaWtlX29wX2JpbmFyeUgGAABzDAAAAAABDgECAQ4BEgMWAXojUEdDb21waWxlci52aXNpdF9ub3RpbGlrZV9vcF9iaW5hcnljAgAAAAAAAAACAAAABgAAAAMAAABzJgAAAGQBZAKgAIcAZgFkA2QEhAh8AXAadAGDAGcBRACDAaEBZgEWAFMAKQVOehRTRUxFQ1QgJXMgV0hFUkUgMSE9MXoCLCBjAQAAAAAAAAACAAAABQAAADMAAABzLAAAAHwAXSR9AWQAiABqAGoBoAJ8AWoDchx0BIMAbgJ8AaEBFgBWAAEAcQJkAVMAKQJ6EENBU1QoTlVMTCBBUyAlcylOKQVyhQAAANoNdHlwZV9jb21waWxlcnKEAAAA2gdfaXNudWxschMAAAApAtoCLjDaBXR5cGVfKQFyagAAAHJbAAAAclwAAAD6CTxnZW5leHByPlkGAABzAgAAAAQEejJQR0NvbXBpbGVyLnZpc2l0X2VtcHR5X3NldF9leHByLjxsb2NhbHM+LjxnZW5leHByPikCck0AAAByEwAAACkCcmoAAABaDWVsZW1lbnRfdHlwZXNyWwAAACkBcmoAAAByXAAAANoUdmlzaXRfZW1wdHlfc2V0X2V4cHJTBgAAcwgAAAAABAIBBAEKBHofUEdDb21waWxlci52aXNpdF9lbXB0eV9zZXRfZXhwcmMDAAAAAAAAAAMAAAAEAAAAAwAAAHMqAAAAdAB0AXwAgwKgAnwBfAKhAn0BfABqA2oEciZ8AaAFZAFkAqECfQF8AVMAKQNO+gFcegJcXCkGcmcAAABytQAAAHLDAAAAcoUAAADaEl9iYWNrc2xhc2hfZXNjYXBlc9oHcmVwbGFjZSkDcmoAAABygwAAAHLNAAAAKQFyawAAAHJbAAAAclwAAABywwAAAGEGAABzCAAAAAABEgIIAQwBeh9QR0NvbXBpbGVyLnJlbmRlcl9saXRlcmFsX3ZhbHVlYwIAAAAAAAAAAwAAAAQAAABLAAAAcxAAAABkAXwAagCgAXwBoQEWAFMAKQJOeg1uZXh0dmFsKCclcycpKQLaCHByZXBhcmVy2g9mb3JtYXRfc2VxdWVuY2UpA3JqAAAA2gNzZXFycgAAAHJbAAAAclsAAAByXAAAANoOdmlzaXRfc2VxdWVuY2VoBgAAcwIAAAAAAXoZUEdDb21waWxlci52aXNpdF9zZXF1ZW5jZWMCAAAAAAAAAAQAAAAFAAAASwAAAHNeAAAAZAF9A3wBagBkAGsJciZ8A2QCfABqAXwBagBmAXwCjgEXADcAfQN8AWoCZABrCXJafAFqAGQAawhyQnwDZAM3AH0DfANkBHwAagF8AWoCZgF8Ao4BFwA3AH0DfANTACkFTnLHAAAAegkgCiBMSU1JVCB6DCAKIExJTUlUIEFMTHoIIE9GRlNFVCApA1oNX2xpbWl0X2NsYXVzZXKEAAAAWg5fb2Zmc2V0X2NsYXVzZSkEcmoAAAByPgAAAHJyAAAAcqsAAAByWwAAAHJbAAAAclwAAADaDGxpbWl0X2NsYXVzZWsGAABzEAAAAAABBAEKARgBCgEKAQgBGAF6F1BHQ29tcGlsZXIubGltaXRfY2xhdXNlYwUAAAAAAAAABQAAAAQAAABDAAAAcyIAAAB8A6AAoQBkAWsDchp0AaACZAJ8AxYAoQGCAWQDfAEXAFMAKQROWgRPTkxZehVVbnJlY29nbml6ZWQgaGludDogJXJ6BU9OTFkgKQPaBXVwcGVycgQAAADaDENvbXBpbGVFcnJvcikFcmoAAADaB3NxbHRleHRyPwAAANoEaGludFoGaXNjcnVkclsAAAByWwAAAHJcAAAA2hVmb3JtYXRfZnJvbV9oaW50X3RleHR1BgAAcwYAAAAAAQwBDgF6IFBHQ29tcGlsZXIuZm9ybWF0X2Zyb21faGludF90ZXh0YwIAAAAAAAAAAwAAAAYAAAALAAAAc24AAAB8AWoAZAFrCXJmfAFqAGQCawhyGGQDUwB0AXwBagB0AnQDZgKDAnJMZARkBaAEhwCHAWYCZAZkB4QIfAFqAEQAgwGhARcAZAgXAFMAZASIAWoFfAFqAGYBiACOARcAZAgXAFMAbgRkCVMAZABTACkKTkZUeglESVNUSU5DVCB6DURJU1RJTkNUIE9OICh6AiwgYwEAAAAAAAAAAgAAAAUAAAATAAAAcxoAAABnAHwAXRJ9AYgBagB8AWYBiACOAZECcQRTAHJbAAAAKQFyhAAAACkCcswAAADaA2NvbCkCcnIAAAByagAAAHJbAAAAclwAAAD6CjxsaXN0Y29tcD6CBgAAcwIAAAAGAHo0UEdDb21waWxlci5nZXRfc2VsZWN0X3ByZWNvbHVtbnMuPGxvY2Fscz4uPGxpc3Rjb21wPnoCKSByxwAAACkGWglfZGlzdGluY3TaCmlzaW5zdGFuY2XaBGxpc3TaBXR1cGxlck0AAAByhAAAACkDcmoAAAByPgAAAHJyAAAAclsAAAApAnJyAAAAcmoAAAByXAAAANoVZ2V0X3NlbGVjdF9wcmVjb2x1bW5zegYAAHMOAAAAAAEKAQoBBAEQBiQGGgN6IFBHQ29tcGlsZXIuZ2V0X3NlbGVjdF9wcmVjb2x1bW5zYwIAAAAAAAAABgAAAAcAAAALAAAAc6YAAAB8AWoAagFyHHwBagBqAnIWZAF9A3EuZAJ9A24SfAFqAGoCcipkA30DbgRkBH0DfAFqAGoDcoJ0BKAFoQB9BHggfAFqAGoDRABdFH0FfASgBnQHoAh8BaEBoQEBAHFIVwB8A2QFZAagCYcAhwFmAmQHZAiECHwERACDAaEBFwA3AH0DfAFqAGoKcpJ8A2QJNwB9A3wBagBqC3KifANkCjcAfQN8A1MAKQtOeg4gRk9SIEtFWSBTSEFSRXoKIEZPUiBTSEFSRXoSIEZPUiBOTyBLRVkgVVBEQVRFegsgRk9SIFVQREFURXoEIE9GIHoCLCBjAQAAAAAAAAACAAAABgAAADMAAABzJgAAAHwAXR59AYgBagB8AWYBZABkAWQCnAKIAJcCjgFWAAEAcQJkA1MAKQRURikCWgZhc2hpbnTaCnVzZV9zY2hlbWFOKQFyhAAAACkCcswAAAByPwAAACkCcnIAAAByagAAAHJbAAAAclwAAAByzgAAAKIGAABzAgAAAAQBei9QR0NvbXBpbGVyLmZvcl91cGRhdGVfY2xhdXNlLjxsb2NhbHM+LjxnZW5leHByPnoHIE5PV0FJVHoMIFNLSVAgTE9DS0VEKQxaD19mb3JfdXBkYXRlX2FyZ9oEcmVhZFoJa2V5X3NoYXJlcjYAAAByBwAAANoKT3JkZXJlZFNldNoGdXBkYXRl2ghzcWxfdXRpbFoYc3VyZmFjZV9zZWxlY3RhYmxlc19vbmx5ck0AAABaBm5vd2FpdFoLc2tpcF9sb2NrZWQpBnJqAAAAcj4AAABycgAAANoDdG1wWgZ0YWJsZXPaAWNyWwAAACkCcnIAAAByagAAAHJcAAAA2hFmb3JfdXBkYXRlX2NsYXVzZY8GAABzJgAAAAACCAEIAQYCBgEIAQYCBAIIAggBDgEUAggBDAEOAwgBCAEIAQgCehxQR0NvbXBpbGVyLmZvcl91cGRhdGVfY2xhdXNlYwMAAAAAAAAABAAAAAQAAAADAAAAcyYAAACHAGYBZAFkAoQIdACgAXwCoQFEAIMBfQNkA2QEoAJ8A6EBFwBTACkFTmMBAAAAAAAAAAIAAAAJAAAAEwAAAHMeAAAAZwB8AF0WfQGIAKAAZAB8AWQBZAJpAKEFkQJxBFMAKQNOVEYpAVoUX2xhYmVsX3NlbGVjdF9jb2x1bW4pAnLMAAAAcukAAAApAXJqAAAAclsAAAByXAAAAHLeAAAAsAYAAHMCAAAABgF6L1BHQ29tcGlsZXIucmV0dXJuaW5nX2NsYXVzZS48bG9jYWxzPi48bGlzdGNvbXA+egpSRVRVUk5JTkcgegIsICkDcgwAAABaEV9zZWxlY3RfaXRlcmFibGVzck0AAAApBHJqAAAA2gRzdG10Wg5yZXR1cm5pbmdfY29sc9oHY29sdW1uc3JbAAAAKQFyagAAAHJcAAAA2hByZXR1cm5pbmdfY2xhdXNlrQYAAHMGAAAAAAMKAQ4DehtQR0NvbXBpbGVyLnJldHVybmluZ19jbGF1c2VjAgAAAAAAAAAGAAAABAAAAEsAAABzcAAAAHwAagB8AWoBagFkARkAZgF8Ao4BfQN8AGoAfAFqAWoBZAIZAGYBfAKOAX0EdAJ8AWoBagGDAWQDawRyYHwAagB8AWoBagFkAxkAZgF8Ao4BfQVkBHwDfAR8BWYDFgBTAGQFfAN8BGYCFgBTAGQAUwApBk5yAQAAAHJ8AAAA6QIAAAB6HFNVQlNUUklORyglcyBGUk9NICVzIEZPUiAlcyl6FVNVQlNUUklORyglcyBGUk9NICVzKSkDcoQAAABaB2NsYXVzZXPaA2xlbikGcmoAAADaBGZ1bmNycgAAANoBc3K4AAAAcn0AAAByWwAAAHJbAAAAclwAAADaFHZpc2l0X3N1YnN0cmluZ19mdW5jtgYAAHMMAAAAAAEWARYBEAEWAQ4Ceh9QR0NvbXBpbGVyLnZpc2l0X3N1YnN0cmluZ19mdW5jYwIAAAAAAAAABAAAAAcAAAALAAAAc2wAAAB8AWoAZABrCXIWZAF8AWoAFgB9A25SfAFqAWQAawlyZGQCZAOgAocAZgFkBGQFhAh8AWoBRACDAaEBFgB9A3wBagNkAGsJcmh8A2QGiABqBHwBagNkB2QHZAiNAxYANwB9A24EZAl9A3wDUwApCk56EE9OIENPTlNUUkFJTlQgJXN6BCglcyl6AiwgYwEAAAAAAAAAAgAAAAYAAAAzAAAAczYAAAB8AF0ufQF0AHwBdAFqAoMCch6IAGoDoAR8AaEBbg6IAGoFfAFkAGQAZAGNA1YAAQBxAmQCUwApA0YpAtoNaW5jbHVkZV90YWJsZXLjAAAATikGct8AAAByBwAAANoMc3RyaW5nX3R5cGVzctMAAADaBXF1b3RlcoQAAAApAnLMAAAAcukAAAApAXJqAAAAclsAAAByXAAAAHLOAAAAxQYAAHMCAAAABAV6MVBHQ29tcGlsZXIuX29uX2NvbmZsaWN0X3RhcmdldC48bG9jYWxzPi48Z2VuZXhwcj56CSBXSEVSRSAlc0YpAnLzAAAAcuMAAAByxwAAACkFWhFjb25zdHJhaW50X3RhcmdldFoYaW5mZXJyZWRfdGFyZ2V0X2VsZW1lbnRzck0AAABaG2luZmVycmVkX3RhcmdldF93aGVyZWNsYXVzZXKEAAAAKQRyagAAANoGY2xhdXNlcnIAAADaC3RhcmdldF90ZXh0clsAAAApAXJqAAAAclwAAADaE19vbl9jb25mbGljdF90YXJnZXS/BgAAcxoAAAAAAgoBDAEKAQYBCgUOAgoBCAEEAQIBDgMEAnoeUEdDb21waWxlci5fb25fY29uZmxpY3RfdGFyZ2V0YwIAAAAAAAAABAAAAAMAAABLAAAAcyIAAAB8AGoAfAFmAXwCjgF9A3wDchpkAXwDFgBTAGQCUwBkAFMAKQNOehlPTiBDT05GTElDVCAlcyBETyBOT1RISU5HehZPTiBDT05GTElDVCBETyBOT1RISU5HKQFy+AAAACkEcmoAAADaC29uX2NvbmZsaWN0cnIAAABy9wAAAHJbAAAAclsAAAByXAAAANocdmlzaXRfb25fY29uZmxpY3RfZG9fbm90aGluZ9cGAABzCAAAAAACDgIEAQgCeidQR0NvbXBpbGVyLnZpc2l0X29uX2NvbmZsaWN0X2RvX25vdGhpbmdjAgAAAAAAAAARAAAACAAAAEsAAABzngEAAHwBfQN8AGoAfAFmAXwCjgF9BGcAfQV0AXwDagKDAX0GfABqA2QBGQBkAhkAfQd8B2oEagV9CHiWfAhEAF2OfQl8CWoGfQp8CnwGawZyPHwGoAd8CqEBfQt0CKAJfAuhAXJ2dAhqCmQAfAt8CWoLZAONA30LbiR0DHwLdAhqCoMCcpp8C2oLag1ymnwLoA6hAH0LfAlqC3wLXwt8AGoPfAugEKEAZARkBY0CfQx8AGoRoBJ8CqEBfQ18BaATZAZ8DXwMZgIWAKEBAQBxPFcAfAaQAXJidBSgFWQHfABqFmoEahdkCKAYZAlkCoQAfAZEAIMBoQFmAhYAoQEBAHhkfAagGaEARABdWFwCfQ59D3QMfA50FGoagwKQAXIofABqEaASfA6hAW4MfABqD3wOZARkBY0CfQ18AGoPdAigG3wPoQFkBGQFjQJ9DHwFoBNkBnwNfAxmAhYAoQEBAJABcQZXAGQIoBh8BaEBfRB8A2ocZABrCZABcpJ8EGQLfABqD3wDahxkDGQEZA2NAxYANwB9EGQOfAR8EGYCFgBTACkPTun/////WgpzZWxlY3RhYmxlKQFyzQAAAEYpAXLjAAAAegclcyA9ICVzekZBZGRpdGlvbmFsIGNvbHVtbiBuYW1lcyBub3QgbWF0Y2hpbmcgYW55IGNvbHVtbiBrZXlzIGluIHRhYmxlICclcyc6ICVzegIsIGMBAAAAAAAAAAIAAAADAAAAcwAAAHMWAAAAfABdDn0BZAB8ARYAVgABAHECZAFTACkCegQnJXMnTnJbAAAAKQJyzAAAAHLpAAAAclsAAAByWwAAAHJcAAAAcs4AAAAHBwAAcwIAAAAEAHo5UEdDb21waWxlci52aXNpdF9vbl9jb25mbGljdF9kb191cGRhdGUuPGxvY2Fscz4uPGdlbmV4cHI+egkgV0hFUkUgJXNUKQJy8wAAAHLjAAAAeh9PTiBDT05GTElDVCAlcyBETyBVUERBVEUgU0VUICVzKR1y+AAAANoEZGljdFoUdXBkYXRlX3ZhbHVlc190b19zZXTaBXN0YWNrcj8AAABy6QAAANoDa2V5cowAAAByCwAAAFoLX2lzX2xpdGVyYWxaDUJpbmRQYXJhbWV0ZXLaBHR5cGVy3wAAAHLLAAAAWgZfY2xvbmVyhAAAANoKc2VsZl9ncm91cHLTAAAAcvUAAADaBmFwcGVuZHIHAAAA2gR3YXJu2glzdGF0ZW1lbnRyjwAAAHJNAAAA2gVpdGVtc3L0AAAAWhFfbGl0ZXJhbF9hc19iaW5kc1oSdXBkYXRlX3doZXJlY2xhdXNlKRFyagAAAHL5AAAAcnIAAABy9gAAAHL3AAAAWg5hY3Rpb25fc2V0X29wc1oOc2V0X3BhcmFtZXRlcnNaEGluc2VydF9zdGF0ZW1lbnTaBGNvbHNy6QAAAFoHY29sX2tleXKDAAAAWgp2YWx1ZV90ZXh0WghrZXlfdGV4dNoBa9oBdloLYWN0aW9uX3RleHRyWwAAAHJbAAAAclwAAADaG3Zpc2l0X29uX2NvbmZsaWN0X2RvX3VwZGF0ZeAGAABzRgAAAAACBAIOAgQCCgMOAQgBCgEGAQgBCgEKARQEDAEIAggBCAESAgwBFgMGAQQBAgMIARoDEgMaAQ4CBAEQAhgCCgEMAQgBEgN6JlBHQ29tcGlsZXIudmlzaXRfb25fY29uZmxpY3RfZG9fdXBkYXRlYwUAAAAAAAAABgAAAAYAAAALAAAAcyAAAABkAWQCoACHAIcBhwJmA2QDZASECHwDRACDAaEBFwBTACkFTnoFRlJPTSB6AiwgYwEAAAAAAAAAAgAAAAYAAAAzAAAAcyYAAAB8AF0efQF8AWoAiAJmAWQAiABkAZwCiAGXAo4BVgABAHECZAJTACkDVCkC2gZhc2Zyb23aCWZyb21oaW50c04pAdoSX2NvbXBpbGVyX2Rpc3BhdGNoKQJyzAAAANoBdCkD2gpmcm9tX2hpbnRzcnIAAAByagAAAHJbAAAAclwAAAByzgAAACEHAABzAgAAAAQBejBQR0NvbXBpbGVyLnVwZGF0ZV9mcm9tX2NsYXVzZS48bG9jYWxzPi48Z2VuZXhwcj4pAXJNAAAAKQZyagAAAFoLdXBkYXRlX3N0bXTaCmZyb21fdGFibGXaC2V4dHJhX2Zyb21zcg0BAABycgAAAHJbAAAAKQNyDQEAAHJyAAAAcmoAAAByXAAAANoSdXBkYXRlX2Zyb21fY2xhdXNlHQcAAHMGAAAAAAMGAQ4Beh1QR0NvbXBpbGVyLnVwZGF0ZV9mcm9tX2NsYXVzZWMFAAAAAAAAAAYAAAAGAAAACwAAAHMgAAAAZAFkAqAAhwCHAYcCZgNkA2QEhAh8A0QAgwGhARcAUwApBXo5UmVuZGVyIHRoZSBERUxFVEUgLi4gVVNJTkcgY2xhdXNlIHNwZWNpZmljIHRvIFBvc3RncmVTUUwuegZVU0lORyB6AiwgYwEAAAAAAAAAAgAAAAYAAAAzAAAAcyYAAAB8AF0efQF8AWoAiAJmAWQAiABkAZwCiAGXAo4BVgABAHECZAJTACkDVCkCcgkBAAByCgEAAE4pAXILAQAAKQJyzAAAAHIMAQAAKQNyDQEAAHJyAAAAcmoAAAByWwAAAHJcAAAAcs4AAAAqBwAAcwIAAAAEAXo2UEdDb21waWxlci5kZWxldGVfZXh0cmFfZnJvbV9jbGF1c2UuPGxvY2Fscz4uPGdlbmV4cHI+KQFyTQAAACkGcmoAAABaC2RlbGV0ZV9zdG10cg4BAAByDwEAAHINAQAAcnIAAAByWwAAACkDcg0BAABycgAAAHJqAAAAclwAAADaGGRlbGV0ZV9leHRyYV9mcm9tX2NsYXVzZSUHAABzBgAAAAAEBgEOAXojUEdDb21waWxlci5kZWxldGVfZXh0cmFfZnJvbV9jbGF1c2UpG3JXAAAAclgAAAByWQAAAHK3AAAAcroAAAByvgAAAHK/AAAAcsAAAABywQAAAHLFAAAAcsgAAAByyQAAAHLPAAAAcsMAAABy1gAAAHLXAAAActwAAABy4gAAAHLqAAAAcu0AAABy8gAAAHL4AAAAcvoAAAByCAEAAHIQAQAAchEBAABybAAAAHJbAAAAclsAAAApAXJrAAAAclwAAABytQAAAA4GAABzLgAAAAgBCAMIBggECAQIBggGCBAIDAgLCA4MBwgDCAoIBQgVCB4ICQgJCBgICQg9CAhytQAAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHNMAAAAZQBaAWQAWgJkAWQChABaA2QDZASEAFoEZAVkBoQAWgVkB2QIhABaBmQJZAqEAFoHZAtkDIQAWghkDWQOhABaCWQPZBCEAFoKZBFTACkS2g1QR0RETENvbXBpbGVyYwIAAAAAAAAABgAAAAYAAABLAAAAc/QAAAB8AGoAoAF8AaEBfQN8AWoCoAN8AGoEoQF9BHQFfAR0BmoHgwJyLHwEagh9BHwBaglyqHwBfAFqCmoLawhyqHwAagRqDHNSdAV8BHQGag2DAnOofAFqDmQAawhzcnQFfAFqDnQPahCDAnKofAFqDmoRcqh0BXwEdAZqEoMCcoh8A2QBNwB9A3HidAV8BHQGag2DAnKefANkAjcAfQNx4nwDZAM3AH0Dbjp8A2QEfABqBGoTahR8AWoCfAFkBY0CFwA3AH0DfACgFXwBoQF9BXwFZABrCXLifANkBnwFFwA3AH0DfAFqFnPwfANkBzcAfQN8A1MAKQhOegogQklHU0VSSUFMegwgU01BTExTRVJJQUx6ByBTRVJJQUz6ASApAVoPdHlwZV9leHByZXNzaW9uegkgREVGQVVMVCB6CSBOT1QgTlVMTCkXctMAAABaDWZvcm1hdF9jb2x1bW5y/wAAAFoMZGlhbGVjdF9pbXBscoUAAABy3wAAAHINAAAAWg1UeXBlRGVjb3JhdG9ycpQAAADaC3ByaW1hcnlfa2V5cj8AAADaFV9hdXRvaW5jcmVtZW50X2NvbHVtbtoUc3VwcG9ydHNfc21hbGxzZXJpYWxaDFNtYWxsSW50ZWdlcnIIAAAAcgUAAADaCFNlcXVlbmNl2ghvcHRpb25hbFoKQmlnSW50ZWdlcnLKAAAAcoQAAABaGWdldF9jb2x1bW5fZGVmYXVsdF9zdHJpbmfaCG51bGxhYmxlKQZyagAAAHIjAAAA2gZrd2FyZ3NaB2NvbHNwZWNaCWltcGxfdHlwZXIIAAAAclsAAAByWwAAAHJcAAAA2hhnZXRfY29sdW1uX3NwZWNpZmljYXRpb24wBwAAczAAAAAAAgwBDgEMAQYDBgEMAggBDAMKAg4BCAQMAQoBDAEKAgoCDAEQAgoBCAEMAgYBCAF6JlBHRERMQ29tcGlsZXIuZ2V0X2NvbHVtbl9zcGVjaWZpY2F0aW9uYwIAAAAAAAAAAgAAAAQAAABDAAAAcxIAAABkAXwAagCgAXwBagKhARYAUwApAk56G0NPTU1FTlQgT04gVEFCTEUgJXMgSVMgTlVMTCkDctMAAADaDGZvcm1hdF90YWJsZXK2AAAAKQJyagAAAHKcAAAAclsAAAByWwAAAHJcAAAA2hh2aXNpdF9kcm9wX3RhYmxlX2NvbW1lbnRYBwAAcwQAAAAAAQgBeiZQR0RETENvbXBpbGVyLnZpc2l0X2Ryb3BfdGFibGVfY29tbWVudGMCAAAAAAAAAAMAAAAHAAAAAwAAAHMwAAAAfAFqAH0CZAGIAGoBoAJ8AqEBZAKgA4cAZgFkA2QEhAh8AmoERACDAaEBZgIWAFMAKQVOehtDUkVBVEUgVFlQRSAlcyBBUyBFTlVNICglcyl6AiwgYwEAAAAAAAAAAgAAAAUAAAAzAAAAcyQAAAB8AF0cfQGIAGoAagF0AqADfAGhAWQAZAGNAlYAAQBxAmQCUwApA1QpAdoNbGl0ZXJhbF9iaW5kc04pBNoMc3FsX2NvbXBpbGVycoQAAAByBgAAANoHbGl0ZXJhbCkCcswAAADaAWUpAXJqAAAAclsAAAByXAAAAHLOAAAAYwcAAHMCAAAABAF6N1BHRERMQ29tcGlsZXIudmlzaXRfY3JlYXRlX2VudW1fdHlwZS48bG9jYWxzPi48Z2VuZXhwcj4pBXK2AAAActMAAADaC2Zvcm1hdF90eXBlck0AAAByjQAAACkDcmoAAAByJQAAAHLNAAAAclsAAAApAXJqAAAAclwAAADaFnZpc2l0X2NyZWF0ZV9lbnVtX3R5cGVdBwAAcwwAAAAAAQYCAgEKAQQBCgF6JFBHRERMQ29tcGlsZXIudmlzaXRfY3JlYXRlX2VudW1fdHlwZWMCAAAAAAAAAAMAAAAEAAAAQwAAAHMWAAAAfAFqAH0CZAF8AGoBoAJ8AqEBFgBTACkCTnoMRFJPUCBUWVBFICVzKQNytgAAAHLTAAAAciIBAAApA3JqAAAAcpwAAAByzQAAAHJbAAAAclsAAAByXAAAANoUdmlzaXRfZHJvcF9lbnVtX3R5cGVoBwAAcwQAAAAAAQYCeiJQR0RETENvbXBpbGVyLnZpc2l0X2Ryb3BfZW51bV90eXBlYwIAAAAAAAAACwAAAAcAAAADAAAAc2YBAACIAWoAfQJ8AWoBfQOIAaACfAOhAQEAZAF9BHwDagNyKHwEZAI3AH0EfARkAzcAfQSIAWoEagVyUnwDagZkBBkAZAUZAH0FfAVyUnwEZAY3AH0EfARkB4gBagd8A2QIZAmNAnwCoAh8A2oJoQFmAhYANwB9BHwDagZkBBkAZAoZAH0GfAZyoHwEZAuIAWoAoAp8BnQLoQKgDKEAFgA3AH0EfANqBmQEGQBkDBkAiQB8BGQNZA6gDYcAhwFmAmQPZBCECHwDag5EAIMBoQEWADcAfQR8A2oGZAQZAGQRGQB9B3wHkAFyBnwEZBJkDqANZBNkEIQAfAegD6EARACDAaEBFgA3AH0EfANqBmQEGQBkFBkAfQh8CJABcix8BGQVfAKgEHwIoQEWADcAfQR8A2oGZAQZAGQWGQB9CXwJZABrCZABcmKIAWoRahJ8CWQIZBdkGI0DfQp8BGQZfAoXADcAfQR8BFMAKRpOegdDUkVBVEUgegdVTklRVUUgegZJTkRFWCDaCnBvc3RncmVzcWzaDGNvbmN1cnJlbnRseXoNQ09OQ1VSUkVOVExZIHoJJXMgT04gJXMgRikB2g5pbmNsdWRlX3NjaGVtYXJFAAAAeglVU0lORyAlcyDaA29wc3oEKCVzKXoCLCBjAQAAAAAAAAACAAAABwAAABMAAABzWAAAAGcAfABdUH0BiAFqAGoBdAJ8AXQDagSDAnMifAGgBaEAbgJ8AWQAZAFkAo0DdAZ8AWQDgwJyTnwBageIAGsGck5kBIgAfAFqBxkAFwBuAmQFFwCRAnEEUwApBkZUKQJy8wAAAHIeAQAAcv4AAAByEwEAAHLHAAAAKQhyHwEAAHKEAAAAct8AAAByDAAAAFoMQ29sdW1uQ2xhdXNlcgABAADaB2hhc2F0dHJy/gAAACkCcswAAADaBGV4cHIpAnIoAQAAcmoAAAByWwAAAHJcAAAAct4AAACLBwAAcwIAAAAGDHo0UEdERExDb21waWxlci52aXNpdF9jcmVhdGVfaW5kZXguPGxvY2Fscz4uPGxpc3Rjb21wPnJIAAAAegogV0lUSCAoJXMpYwEAAAAAAAAAAgAAAAQAAABTAAAAcxQAAABnAHwAXQx9AWQAfAEWAJECcQRTACkBegclcyA9ICVzclsAAAApAnLMAAAAWhFzdG9yYWdlX3BhcmFtZXRlcnJbAAAAclsAAAByXAAAAHLeAAAAogcAAHMCAAAABgHaCnRhYmxlc3BhY2V6DiBUQUJMRVNQQUNFICVzckYAAABUKQJy8wAAAHIeAQAAegcgV0hFUkUgKRNy0wAAAHK2AAAAWhNfdmVyaWZ5X2luZGV4X3RhYmxlckMAAAByhQAAANojX3N1cHBvcnRzX2NyZWF0ZV9pbmRleF9jb25jdXJyZW50bHnaD2RpYWxlY3Rfb3B0aW9uc9oUX3ByZXBhcmVkX2luZGV4X25hbWVyHAEAAHI/AAAA2hN2YWxpZGF0ZV9zcWxfcGhyYXNl2glJRFhfVVNJTkfaBWxvd2Vyck0AAABaC2V4cHJlc3Npb25zcgQBAABy9QAAAHIfAQAAcoQAAAApC3JqAAAAciUAAABy0wAAANoFaW5kZXhyqwAAAHImAQAAckUAAABaCndpdGhjbGF1c2XaD3RhYmxlc3BhY2VfbmFtZVoLd2hlcmVjbGF1c2VaDndoZXJlX2NvbXBpbGVkclsAAAApAnIoAQAAcmoAAAByXAAAANoSdmlzaXRfY3JlYXRlX2luZGV4bQcAAHNOAAAAAAEGAQYBCgEEAQYBCAEIAggBDgEEAQgCBAEMARIDDgEEAQIBAgEWAw4BBAEEAgwMEAUOAgYBBAEEAgYBEgUOAgYBEgIOAgoBBgEMAgwBeiBQR0RETENvbXBpbGVyLnZpc2l0X2NyZWF0ZV9pbmRleGMCAAAAAAAAAAUAAAAFAAAAQwAAAHNCAAAAfAFqAH0CZAF9A3wAagFqAnIsfAJqA2QCGQBkAxkAfQR8BHIsfANkBDcAfQN8A3wAagR8AmQFZAaNAjcAfQN8A1MAKQdOegwKRFJPUCBJTkRFWCByJQEAAHImAQAAeg1DT05DVVJSRU5UTFkgVCkBcicBAAApBXK2AAAAcoUAAADaIV9zdXBwb3J0c19kcm9wX2luZGV4X2NvbmN1cnJlbnRseXItAQAAci4BAAApBXJqAAAAcpwAAAByMgEAAHKrAAAAciYBAAByWwAAAHJbAAAAclwAAADaEHZpc2l0X2Ryb3BfaW5kZXi2BwAAcxAAAAAAAQYCBAIIAQ4BBAEIAhIBeh5QR0RETENvbXBpbGVyLnZpc2l0X2Ryb3BfaW5kZXhjAgAAAAAAAAAIAAAABwAAAEsAAABzvgAAAGQBfQN8AWoAZABrCXIifANkAnwAagGgAnwBoQEWADcAfQNnAH0EeDp8AWoDRABdMFwDfQV9Bn0HZAN8AmQEPAB8BKAEZAV8AGoFagZ8BWYBfAKOAXwHZgIWAKEBAQBxLlcAfANkBnwAagGgB3wBagh0CaECoAqhAGQHoAt8BKEBZgIWADcAfQN8AWoMZABrCXKsfANkCHwAagVqBnwBagxkCWQKjQIWADcAfQN8A3wAoA18AaEBNwB9A3wDUwApC05yxwAAAHoOQ09OU1RSQUlOVCAlcyBGcvMAAAB6CiVzIFdJVEggJXN6FUVYQ0xVREUgVVNJTkcgJXMgKCVzKXoCLCB6CyBXSEVSRSAoJXMpVCkBch4BAAApDnKPAAAActMAAABaEWZvcm1hdF9jb25zdHJhaW50Wg1fcmVuZGVyX2V4cHJzcgEBAAByHwEAAHKEAAAAci8BAAByRQAAAHIwAQAAcjEBAAByTQAAAHJGAAAAWh9kZWZpbmVfY29uc3RyYWludF9kZWZlcnJhYmlsaXR5KQhyagAAAHIkAAAAcnIAAAByqwAAAHILAAAAcioBAAByjwAAANoCb3ByWwAAAHJbAAAAclwAAADaGHZpc2l0X2V4Y2x1ZGVfY29uc3RyYWludMMHAABzJAAAAAABBAEKAQoBCgIEARIBCAEEAR4CBAEGAQwCEAIKAQoBEAIOAXomUEdERExDb21waWxlci52aXNpdF9leGNsdWRlX2NvbnN0cmFpbnRjAgAAAAAAAAAHAAAACAAAAAMAAABz/AAAAGcAfQJ8AWoAZAEZAH0DfAOgAWQCoQF9BHwEZABrCXJadAJ8BHQDdARmAoMCczR8BGYBfQR8AqAFZANkBKAGhwBmAWQFZAaECHwERACDAaEBFwBkBxcAoQEBAHwDZAgZAHJ0fAKgBWQJfANkCBkAFgChAQEAfANkChkAZAtrCHKMfAKgBWQMoQEBAG4WfANkChkAZA1rCHKifAKgBWQOoQEBAHwDZA8ZAHLMfANkDxkAoAdkEGQRoQKgCKEAfQV8AqAFZBJ8BRYAoQEBAHwDZBMZAHLyfANkExkAfQZ8AqAFZBSIAGoJoAp8BqEBFgChAQEAZBWgBnwCoQFTACkWTnIlAQAA2ghpbmhlcml0c3oNCiBJTkhFUklUUyAoIHoCLCBjAQAAAAAAAAACAAAABAAAADMAAABzGgAAAHwAXRJ9AYgAagCgAXwBoQFWAAEAcQJkAFMAKQFOKQJy0wAAAHL1AAAAKQJyzAAAAHKPAAAAKQFyagAAAHJbAAAAclwAAAByzgAAAOYHAABzAgAAAAQAejJQR0RETENvbXBpbGVyLnBvc3RfY3JlYXRlX3RhYmxlLjxsb2NhbHM+LjxnZW5leHByPnoCICnaDHBhcnRpdGlvbl9ieXoRCiBQQVJUSVRJT04gQlkgJXPaCXdpdGhfb2lkc1R6CwogV0lUSCBPSURTRnoOCiBXSVRIT1VUIE9JRFPaCW9uX2NvbW1pdNoBX3ITAQAAeg4KIE9OIENPTU1JVCAlc3IrAQAAeg8KIFRBQkxFU1BBQ0UgJXNyxwAAACkLci0BAAByogAAAHLfAAAAcuAAAABy4QAAAHIBAQAAck0AAABy0gAAAHLYAAAActMAAABy9QAAACkHcmoAAAByPwAAAFoKdGFibGVfb3B0c1oHcGdfb3B0c3I5AQAAWhFvbl9jb21taXRfb3B0aW9uc3IzAQAAclsAAAApAXJqAAAAclwAAADaEXBvc3RfY3JlYXRlX3RhYmxl3AcAAHMsAAAAAAEEAQoCCgEIAQ4BBgEEAyIDCAESAgwBDAEMAQoCCAEUAQ4CCAEIAQQBEgN6H1BHRERMQ29tcGlsZXIucG9zdF9jcmVhdGVfdGFibGVOKQtyVwAAAHJYAAAAclkAAAByGwEAAHIdAQAAciMBAAByJAEAAHI0AQAAcjYBAAByOAEAAHI+AQAAclsAAAByWwAAAHJbAAAAclwAAAByEgEAAC8HAABzEAAAAAgBCCgIBQgLCAUISQgNCBlyEgEAAGMAAAAAAAAAAAAAAAADAAAAAAAAAHMEAQAAZQBaAWQAWgJkAWQChABaA2QDZASEAFoEZAVkBoQAWgVkB2QIhABaBmQJZAqEAFoHZAtkDIQAWghkDWQOhABaCWQPZBCEAFoKZBFkEoQAWgtkE2QUhABaDGQVZBaEAFoNZBdkGIQAWg5kGWQahABaD2QbZByEAFoQZB1kHoQAWhFkH2QghABaEmQhZCKEAFoTZCNkJIQAWhRkJWQmhABaFWQnZCiEAFoWhwBmAWQpZCqECFoXZCtkLIQAWhhkLWQuhABaGWQvZDCEAFoaZDFkMoQAWhtkM2Q0hABaHGQ1ZDaEAFodZDdkOIQAWh5kOWQ6hABaH2Q7ZDyEAFoghwAEAFohUwApPdoOUEdUeXBlQ29tcGlsZXJjAgAAAAAAAAADAAAAAQAAAEsAAABzBAAAAGQBUwApAk5yiQAAAHJbAAAAKQNyagAAAHLNAAAAcnIAAAByWwAAAHJbAAAAclwAAADaDnZpc2l0X1RTVkVDVE9SAAgAAHMCAAAAAAF6HVBHVHlwZUNvbXBpbGVyLnZpc2l0X1RTVkVDVE9SYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOcl4AAAByWwAAACkDcmoAAAByzQAAAHJyAAAAclsAAAByWwAAAHJcAAAA2gp2aXNpdF9JTkVUAwgAAHMCAAAAAAF6GVBHVHlwZUNvbXBpbGVyLnZpc2l0X0lORVRjAgAAAAAAAAADAAAAAQAAAEsAAABzBAAAAGQBUwApAk5yXwAAAHJbAAAAKQNyagAAAHLNAAAAcnIAAAByWwAAAHJbAAAAclwAAADaCnZpc2l0X0NJRFIGCAAAcwIAAAAAAXoZUEdUeXBlQ29tcGlsZXIudmlzaXRfQ0lEUmMCAAAAAAAAAAMAAAABAAAASwAAAHMEAAAAZAFTACkCTnJgAAAAclsAAAApA3JqAAAAcs0AAABycgAAAHJbAAAAclsAAAByXAAAANoNdmlzaXRfTUFDQUREUgkIAABzAgAAAAABehxQR1R5cGVDb21waWxlci52aXNpdF9NQUNBRERSYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOcmEAAAByWwAAACkDcmoAAAByzQAAAHJyAAAAclsAAAByWwAAAHJcAAAA2gt2aXNpdF9NT05FWQwIAABzAgAAAAABehpQR1R5cGVDb21waWxlci52aXNpdF9NT05FWWMCAAAAAAAAAAMAAAABAAAASwAAAHMEAAAAZAFTACkCTnJjAAAAclsAAAApA3JqAAAAcs0AAABycgAAAHJbAAAAclsAAAByXAAAANoJdmlzaXRfT0lEDwgAAHMCAAAAAAF6GFBHVHlwZUNvbXBpbGVyLnZpc2l0X09JRGMCAAAAAAAAAAMAAAABAAAASwAAAHMEAAAAZAFTACkCTnJkAAAAclsAAAApA3JqAAAAcs0AAABycgAAAHJbAAAAclsAAAByXAAAANoOdmlzaXRfUkVHQ0xBU1MSCAAAcwIAAAAAAXodUEdUeXBlQ29tcGlsZXIudmlzaXRfUkVHQ0xBU1NjAgAAAAAAAAADAAAAAwAAAEsAAABzHAAAAHwBagBzCmQBUwBkAmQDfAFqAGkBFgBTAGQAUwApBE5yEgAAAHoURkxPQVQoJShwcmVjaXNpb24pcylyaQAAACkBcmkAAAApA3JqAAAAcs0AAABycgAAAHJbAAAAclsAAAByXAAAANoLdmlzaXRfRkxPQVQVCAAAcwYAAAAAAQYBBAJ6GlBHVHlwZUNvbXBpbGVyLnZpc2l0X0ZMT0FUYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOehBET1VCTEUgUFJFQ0lTSU9OclsAAAApA3JqAAAAcs0AAABycgAAAHJbAAAAclsAAAByXAAAANoWdmlzaXRfRE9VQkxFX1BSRUNJU0lPThsIAABzAgAAAAABeiVQR1R5cGVDb21waWxlci52aXNpdF9ET1VCTEVfUFJFQ0lTSU9OYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOcg4AAAByWwAAACkDcmoAAAByzQAAAHJyAAAAclsAAAByWwAAAHJcAAAA2gx2aXNpdF9CSUdJTlQeCAAAcwIAAAAAAXobUEdUeXBlQ29tcGlsZXIudmlzaXRfQklHSU5UYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOWgZIU1RPUkVyWwAAACkDcmoAAAByzQAAAHJyAAAAclsAAAByWwAAAHJcAAAA2gx2aXNpdF9IU1RPUkUhCAAAcwIAAAAAAXobUEdUeXBlQ29tcGlsZXIudmlzaXRfSFNUT1JFYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOWgRKU09OclsAAAApA3JqAAAAcs0AAABycgAAAHJbAAAAclsAAAByXAAAANoKdmlzaXRfSlNPTiQIAABzAgAAAAABehlQR1R5cGVDb21waWxlci52aXNpdF9KU09OYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOWgVKU09OQnJbAAAAKQNyagAAAHLNAAAAcnIAAAByWwAAAHJbAAAAclwAAADaC3Zpc2l0X0pTT05CJwgAAHMCAAAAAAF6GlBHVHlwZUNvbXBpbGVyLnZpc2l0X0pTT05CYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOWglJTlQ0UkFOR0VyWwAAACkDcmoAAAByzQAAAHJyAAAAclsAAAByWwAAAHJcAAAA2g92aXNpdF9JTlQ0UkFOR0UqCAAAcwIAAAAAAXoeUEdUeXBlQ29tcGlsZXIudmlzaXRfSU5UNFJBTkdFYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOWglJTlQ4UkFOR0VyWwAAACkDcmoAAAByzQAAAHJyAAAAclsAAAByWwAAAHJcAAAA2g92aXNpdF9JTlQ4UkFOR0UtCAAAcwIAAAAAAXoeUEdUeXBlQ29tcGlsZXIudmlzaXRfSU5UOFJBTkdFYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOWghOVU1SQU5HRXJbAAAAKQNyagAAAHLNAAAAcnIAAAByWwAAAHJbAAAAclwAAADaDnZpc2l0X05VTVJBTkdFMAgAAHMCAAAAAAF6HVBHVHlwZUNvbXBpbGVyLnZpc2l0X05VTVJBTkdFYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOWglEQVRFUkFOR0VyWwAAACkDcmoAAAByzQAAAHJyAAAAclsAAAByWwAAAHJcAAAA2g92aXNpdF9EQVRFUkFOR0UzCAAAcwIAAAAAAXoeUEdUeXBlQ29tcGlsZXIudmlzaXRfREFURVJBTkdFYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOWgdUU1JBTkdFclsAAAApA3JqAAAAcs0AAABycgAAAHJbAAAAclsAAAByXAAAANoNdmlzaXRfVFNSQU5HRTYIAABzAgAAAAABehxQR1R5cGVDb21waWxlci52aXNpdF9UU1JBTkdFYwIAAAAAAAAAAwAAAAEAAABLAAAAcwQAAABkAVMAKQJOWglUU1RaUkFOR0VyWwAAACkDcmoAAAByzQAAAHJyAAAAclsAAAByWwAAAHJcAAAA2g92aXNpdF9UU1RaUkFOR0U5CAAAcwIAAAAAAXoeUEdUeXBlQ29tcGlsZXIudmlzaXRfVFNUWlJBTkdFYwIAAAAAAAAAAwAAAAMAAABLAAAAcw4AAAB8AGoAfAFmAXwCjgFTACkBTikB2g92aXNpdF9USU1FU1RBTVApA3JqAAAAcs0AAABycgAAAHJbAAAAclsAAAByXAAAANoOdmlzaXRfZGF0ZXRpbWU8CAAAcwIAAAAAAXodUEdUeXBlQ29tcGlsZXIudmlzaXRfZGF0ZXRpbWVjAgAAAAAAAAADAAAAAwAAAAsAAABzNAAAAHwBagByDnwAagFqAnMidAN0BHwAgwJqBXwBZgF8Ao4BUwB8AGoGfAFmAXwCjgFTAGQAUwApAU4pB3KoAAAAcoUAAABylQAAAHJnAAAAcj8BAADaCnZpc2l0X2VudW3aCnZpc2l0X0VOVU0pA3JqAAAAcs0AAABycgAAACkBcmsAAAByWwAAAHJcAAAAclUBAAA/CAAAcwYAAAAAAQ4BFAJ6GVBHVHlwZUNvbXBpbGVyLnZpc2l0X2VudW1jAgAAAAAAAAADAAAAAwAAAEsAAABzDgAAAHwAagBqAaACfAGhAVMAKQFOKQNyhQAAANoTaWRlbnRpZmllcl9wcmVwYXJlcnIiAQAAKQNyagAAAHLNAAAAcnIAAAByWwAAAHJbAAAAclwAAAByVgEAAEUIAABzAgAAAAABehlQR1R5cGVDb21waWxlci52aXNpdF9FTlVNYwIAAAAAAAAAAwAAAAUAAABLAAAAczQAAABkAXQAfAFkAmQAgwNkAGsJchxkA3wBagEWAG4CZAR8AWoCcihkBXAqZAZkBxcAZgIWAFMAKQhOeg5USU1FU1RBTVAlcyAlc3JpAAAAegQoJWQpcscAAADaBFdJVEjaB1dJVEhPVVR6CiBUSU1FIFpPTkUpA9oHZ2V0YXR0cnJpAAAAcmYAAAApA3JqAAAAcs0AAABycgAAAHJbAAAAclsAAAByXAAAAHJTAQAASAgAAHMIAAAAAAECAhoBAgF6HlBHVHlwZUNvbXBpbGVyLnZpc2l0X1RJTUVTVEFNUGMCAAAAAAAAAAMAAAAFAAAASwAAAHM0AAAAZAF0AHwBZAJkAIMDZABrCXIcZAN8AWoBFgBuAmQEfAFqAnIoZAVwKmQGZAcXAGYCFgBTACkITnoJVElNRSVzICVzcmkAAAB6BCglZClyxwAAAHJYAQAAclkBAAB6CiBUSU1FIFpPTkUpA3JaAQAAcmkAAAByZgAAACkDcmoAAAByzQAAAHJyAAAAclsAAAByWwAAAHJcAAAA2gp2aXNpdF9USU1FUAgAAHMIAAAAAAECAhoBAgF6GVBHVHlwZUNvbXBpbGVyLnZpc2l0X1RJTUVjAgAAAAAAAAAEAAAAAwAAAEsAAABzOAAAAGQBfQN8AWoAZABrCXIcfANkAnwBagAXADcAfQN8AWoBZABrCXI0fANkA3wBagEWADcAfQN8A1MAKQROcm4AAAByEwEAAHoFICglZCkpAnJvAAAAcmkAAAApBHJqAAAAcs0AAABycgAAAHKrAAAAclsAAAByWwAAAHJcAAAA2g52aXNpdF9JTlRFUlZBTFgIAABzDAAAAAABBAEKAQ4BCgEOAXodUEdUeXBlQ29tcGlsZXIudmlzaXRfSU5URVJWQUxjAgAAAAAAAAAEAAAAAwAAAEsAAABzMgAAAHwBagByJGQBfQN8AWoBZABrCXIufANkAnwBagEWADcAfQNuCmQDfAFqARYAfQN8A1MAKQROegtCSVQgVkFSWUlOR3oEKCVkKXoHQklUKCVkKSkCcn4AAAByfQAAACkEcmoAAAByzQAAAHJyAAAAWghjb21waWxlZHJbAAAAclsAAAByXAAAANoJdmlzaXRfQklUYAgAAHMMAAAAAAEGAQQBCgEQAgoBehhQR1R5cGVDb21waWxlci52aXNpdF9CSVRjAgAAAAAAAAADAAAAAQAAAEsAAABzBAAAAGQBUwApAk5yGQAAAHJbAAAAKQNyagAAAHLNAAAAcnIAAAByWwAAAHJbAAAAclwAAADaCnZpc2l0X1VVSURpCAAAcwIAAAAAAXoZUEdUeXBlQ29tcGlsZXIudmlzaXRfVVVJRGMCAAAAAAAAAAMAAAADAAAASwAAAHMOAAAAfABqAHwBZgF8Ao4BUwApAU4pAdoLdmlzaXRfQllURUEpA3JqAAAAcs0AAABycgAAAHJbAAAAclsAAAByXAAAANoSdmlzaXRfbGFyZ2VfYmluYXJ5bAgAAHMCAAAAAAF6IVBHVHlwZUNvbXBpbGVyLnZpc2l0X2xhcmdlX2JpbmFyeWMCAAAAAAAAAAMAAAABAAAASwAAAHMEAAAAZAFTACkCTnJWAAAAclsAAAApA3JqAAAAcs0AAABycgAAAHJbAAAAclsAAAByXAAAAHJfAQAAbwgAAHMCAAAAAAF6GlBHVHlwZUNvbXBpbGVyLnZpc2l0X0JZVEVBYwIAAAAAAAAABAAAAAYAAABLAAAAczYAAAB8AKAAfAFqAaEBfQN0AmoDZAFkAmQDfAFqBGQAawlyJnwBagRuAmQEFAAWAHwDZARkBY0EUwApBk56EigoPzogQ09MTEFURS4qKT8pJHoEJXNcMXoCW11yfAAAACkB2gVjb3VudCkFcoQAAABaCWl0ZW1fdHlwZdoCcmXaA3N1YloKZGltZW5zaW9ucykEcmoAAAByzQAAAHJyAAAAcksAAAByWwAAAHJbAAAAclwAAADaC3Zpc2l0X0FSUkFZcggAAHMQAAAAAAMMAQQBAgICAgIBFgMCAXoaUEdUeXBlQ29tcGlsZXIudmlzaXRfQVJSQVkpInJXAAAAclgAAAByWQAAAHJAAQAAckEBAAByQgEAAHJDAQAAckQBAAByRQEAAHJGAQAAckcBAABySAEAAHJJAQAAckoBAABySwEAAHJMAQAAck0BAAByTgEAAHJPAQAAclABAAByUQEAAHJSAQAAclQBAAByVQEAAHJWAQAAclMBAAByWwEAAHJcAQAAcl0BAAByXgEAAHJgAQAAcl8BAAByZAEAAHJsAAAAclsAAAByWwAAACkBcmsAAAByXAAAAHI/AQAA/wcAAHM8AAAACAEIAwgDCAMIAwgDCAMIAwgGCAMIAwgDCAMIAwgDCAMIAwgDCAMIAwgDDAYIAwgICAgICAgJCAMIAwgDcj8BAABjAAAAAAAAAAAAAAAAAwAAAEAAAABzIgAAAGUAWgFkAFoCZQNaBGQBZAKEAFoFZAdkBGQFhAFaBmQGUwApCNoUUEdJZGVudGlmaWVyUHJlcGFyZXJjAgAAAAAAAAACAAAABAAAAEMAAABzKgAAAHwBZAEZAHwAagBrAnImfAFkAmQDhQIZAKABfABqAnwAagOhAn0BfAFTACkETnIBAAAAcnwAAABy+wAAACkEWg1pbml0aWFsX3F1b3RlctIAAABaD2VzY2FwZV90b19xdW90ZVoMZXNjYXBlX3F1b3RlKQJyagAAAHKDAAAAclsAAAByWwAAAHJcAAAA2hNfdW5xdW90ZV9pZGVudGlmaWVyiAgAAHMIAAAAAAEOAQwBDAJ6KFBHSWRlbnRpZmllclByZXBhcmVyLl91bnF1b3RlX2lkZW50aWZpZXJUYwMAAAAAAAAABQAAAAMAAABDAAAAc04AAAB8AWoAcxB0AaACZAGhAYIBfACgA3wBagChAX0DfACgBHwBoQF9BHwAagVzSnwCckp8BGQAawlySnwAoAZ8BKEBZAIXAHwDFwB9A3wDUwApA056JVBvc3RncmVTUUwgRU5VTSB0eXBlIHJlcXVpcmVzIGEgbmFtZS7aAS4pB3KPAAAAcgQAAABy2QAAAHL1AAAA2hFzY2hlbWFfZm9yX29iamVjdFoLb21pdF9zY2hlbWFaDHF1b3RlX3NjaGVtYSkFcmoAAAByzQAAAHLjAAAAco8AAADaEGVmZmVjdGl2ZV9zY2hlbWFyWwAAAHJbAAAAclwAAAByIgEAAI8IAABzEgAAAAABBgEKAgwBCgMGAQQBCAISAXogUEdJZGVudGlmaWVyUHJlcGFyZXIuZm9ybWF0X3R5cGVOKQFUKQdyVwAAAHJYAAAAclkAAADaDlJFU0VSVkVEX1dPUkRTWg5yZXNlcnZlZF93b3Jkc3JmAQAAciIBAAByWwAAAHJbAAAAclsAAAByXAAAAHJlAQAAhAgAAHMGAAAACAIEAggHcmUBAABjAAAAAAAAAAAAAAAAAwAAAEAAAABzPAAAAGUAWgFkAFoCZAFkAoQAWgNkDWQEZAWEAVoEZA5kBmQHhAFaBWQPZAhkCYQBWgZkEGQLZAyEAVoHZANTACkR2gtQR0luc3BlY3RvcmMCAAAAAAAAAAIAAAAEAAAAQwAAAHMSAAAAdABqAaACfAB8AaECAQBkAFMAKQFOKQNyCQAAANoJSW5zcGVjdG9ycmgAAAApAnJqAAAA2gRjb25uclsAAAByWwAAAHJcAAAAcmgAAACgCAAAcwIAAAAAAXoUUEdJbnNwZWN0b3IuX19pbml0X19OYwMAAAAAAAAAAwAAAAYAAABDAAAAcxgAAAB8AGoAagF8AGoCfAF8AnwAagNkAY0EUwApAnooUmV0dXJuIHRoZSBPSUQgZm9yIHRoZSBnaXZlbiB0YWJsZSBuYW1lLikB2gppbmZvX2NhY2hlKQRyhQAAANoNZ2V0X3RhYmxlX29pZHKZAAAAcm4BAAApA3JqAAAA2gp0YWJsZV9uYW1lcgUAAAByWwAAAHJbAAAAclwAAABybwEAAKMIAABzBAAAAAADBgF6GVBHSW5zcGVjdG9yLmdldF90YWJsZV9vaWRjAgAAAAAAAAACAAAABAAAAEMAAABzGgAAAHwBcAh8AGoAfQF8AGoBoAJ8AGoDfAGhAlMAKQFhSwIAAFJldHVybiBhIGxpc3Qgb2YgRU5VTSBvYmplY3RzLgoKICAgICAgICBFYWNoIG1lbWJlciBpcyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGVzZSBmaWVsZHM6CgogICAgICAgICAgICAqIG5hbWUgLSBuYW1lIG9mIHRoZSBlbnVtCiAgICAgICAgICAgICogc2NoZW1hIC0gdGhlIHNjaGVtYSBuYW1lIGZvciB0aGUgZW51bS4KICAgICAgICAgICAgKiB2aXNpYmxlIC0gYm9vbGVhbiwgd2hldGhlciBvciBub3QgdGhpcyBlbnVtIGlzIHZpc2libGUKICAgICAgICAgICAgICBpbiB0aGUgZGVmYXVsdCBzZWFyY2ggcGF0aC4KICAgICAgICAgICAgKiBsYWJlbHMgLSBhIGxpc3Qgb2Ygc3RyaW5nIGxhYmVscyB0aGF0IGFwcGx5IHRvIHRoZSBlbnVtLgoKICAgICAgICA6cGFyYW0gc2NoZW1hOiBzY2hlbWEgbmFtZS4gIElmIE5vbmUsIHRoZSBkZWZhdWx0IHNjaGVtYQogICAgICAgICAodHlwaWNhbGx5ICdwdWJsaWMnKSBpcyB1c2VkLiAgTWF5IGFsc28gYmUgc2V0IHRvICcqJyB0bwogICAgICAgICBpbmRpY2F0ZSBsb2FkIGVudW1zIGZvciBhbGwgc2NoZW1hcy4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4wLjAKCiAgICAgICAgKQTaE2RlZmF1bHRfc2NoZW1hX25hbWVyhQAAANoLX2xvYWRfZW51bXNymQAAACkCcmoAAAByBQAAAHJbAAAAclsAAAByXAAAANoJZ2V0X2VudW1zqggAAHMEAAAAABIKAXoVUEdJbnNwZWN0b3IuZ2V0X2VudW1zYwIAAAAAAAAAAgAAAAQAAABDAAAAcxoAAAB8AXAIfABqAH0BfABqAaACfABqA3wBoQJTACkBYQYBAABSZXR1cm4gYSBsaXN0IG9mIEZPUkVJR04gVEFCTEUgbmFtZXMuCgogICAgICAgIEJlaGF2aW9yIGlzIHNpbWlsYXIgdG8gdGhhdCBvZiA6bWV0aDpgLkluc3BlY3Rvci5nZXRfdGFibGVfbmFtZXNgLAogICAgICAgIGV4Y2VwdCB0aGF0IHRoZSBsaXN0IGlzIGxpbWl0ZWQgdG8gdGhvc2UgdGFibGVzIHRoYXQgcmVwb3J0IGEKICAgICAgICBgYHJlbGtpbmRgYCB2YWx1ZSBvZiBgYGZgYC4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4wLjAKCiAgICAgICAgKQRycQEAAHKFAAAA2hhfZ2V0X2ZvcmVpZ25fdGFibGVfbmFtZXNymQAAACkCcmoAAAByBQAAAHJbAAAAclsAAAByXAAAANoXZ2V0X2ZvcmVpZ25fdGFibGVfbmFtZXO/CAAAcwQAAAAACgoBeiNQR0luc3BlY3Rvci5nZXRfZm9yZWlnbl90YWJsZV9uYW1lc6kC2gVwbGFpbtoMbWF0ZXJpYWxpemVkYwMAAAAAAAAAAwAAAAYAAABDAAAAcxgAAAB8AGoAagF8AGoCfAF8AGoDfAJkAY0EUwApAmGkAQAAUmV0dXJuIGFsbCB2aWV3IG5hbWVzIGluIGBzY2hlbWFgLgoKICAgICAgICA6cGFyYW0gc2NoZW1hOiBPcHRpb25hbCwgcmV0cmlldmUgbmFtZXMgZnJvbSBhIG5vbi1kZWZhdWx0IHNjaGVtYS4KICAgICAgICAgRm9yIHNwZWNpYWwgcXVvdGluZywgdXNlIDpjbGFzczpgLnF1b3RlZF9uYW1lYC4KCiAgICAgICAgOnBhcmFtIGluY2x1ZGU6IHNwZWNpZnkgd2hpY2ggdHlwZXMgb2Ygdmlld3MgdG8gcmV0dXJuLiAgUGFzc2VkCiAgICAgICAgIGFzIGEgc3RyaW5nIHZhbHVlIChmb3IgYSBzaW5nbGUgdHlwZSkgb3IgYSB0dXBsZSAoZm9yIGFueSBudW1iZXIKICAgICAgICAgb2YgdHlwZXMpLiAgRGVmYXVsdHMgdG8gYGAoJ3BsYWluJywgJ21hdGVyaWFsaXplZCcpYGAuCgogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEKCiAgICAgICAgKQJybgEAANoHaW5jbHVkZSkEcoUAAADaDmdldF92aWV3X25hbWVzcpkAAABybgEAACkDcmoAAAByBQAAAHJ5AQAAclsAAAByWwAAAHJcAAAAcnoBAADMCAAAcwQAAAAADgYBehpQR0luc3BlY3Rvci5nZXRfdmlld19uYW1lcykBTikBTikBTikCTnJ2AQAAKQhyVwAAAHJYAAAAclkAAAByaAAAAHJvAQAAcnMBAABydQEAAHJ6AQAAclsAAAByWwAAAHJbAAAAclwAAAByawEAAJ8IAABzCgAAAAgBCAMKBwoVCg1yawEAAGMAAAAAAAAAAAAAAAABAAAAQAAAAHMQAAAAZQBaAWQAWgJkAVoDZAJTACkDcpgAAABaEGNyZWF0ZV9lbnVtX3R5cGVOKQRyVwAAAHJYAAAAclkAAAByWgAAAHJbAAAAclsAAAByWwAAAHJcAAAAcpgAAADfCAAAcwIAAAAIAXKYAAAAYwAAAAAAAAAAAAAAAAEAAABAAAAAcxAAAABlAFoBZABaAmQBWgNkAlMAKQNymwAAAFoOZHJvcF9lbnVtX3R5cGVOKQRyVwAAAHJYAAAAclkAAAByWgAAAHJbAAAAclsAAAByWwAAAHJcAAAAcpsAAADjCAAAcwIAAAAIAXKbAAAAYwAAAAAAAAAAAAAAAAMAAAAAAAAAcywAAABlAFoBZABaAmQBZAKEAFoDhwBmAWQDZASECFoEZAVkBoQAWgWHAAQAWgZTACkH2hJQR0V4ZWN1dGlvbkNvbnRleHRjAwAAAAAAAAADAAAABgAAAEMAAABzGgAAAHwAoABkAXwAagFqAqADfAGhARYAfAKhAlMAKQJOehRzZWxlY3QgbmV4dHZhbCgnJXMnKSkE2g9fZXhlY3V0ZV9zY2FsYXJyhQAAAHJXAQAActQAAAApA3JqAAAActUAAAByzQAAAHJbAAAAclsAAAByXAAAANoNZmlyZV9zZXF1ZW5jZegIAABzCAAAAAABBAICAQ4CeiBQR0V4ZWN1dGlvbkNvbnRleHQuZmlyZV9zZXF1ZW5jZWMCAAAAAAAAAAgAAAALAAAAAwAAAHM2AQAAfAFqAJABciZ8AXwBagFqAmsIkAFyJnwBagNyOnwBagNqBHI6fACgBWQBfAFqA2oGFgB8AWoHoQJTAHwBaghkAGsIc1h8AWoIagmQAXImfAFqCGoKkAFyJnkKfAFqC30CVwBudAQAdAxrCnLWAQABAAEAfAFqAWoNfQN8AWoNfQR8A2QCZAN0DmQCZAN0D3wEgwEYAIMCFwCFAhkAfQN8BGQCZAN0DmQCZAN0D3wDgwEYAIMCFwCFAhkAfQRkBHwDfARmAhYAfQV8BQQAfAFfC30CWQBuAlgAfAFqAWQAawly8nwAahCgEXwBagGhAX0GbgRkAH0GfAZkAGsJkAFyDmQFfAZ8AmYCFgB9B24KZAZ8AmYBFgB9B3wAoAV8B3wBagehAlMAdBJ0E3wAgwKgFHwBoQFTACkHTnoJc2VsZWN0ICVzcgEAAADpHQAAAHoJJXNfJXNfc2VxehtzZWxlY3QgbmV4dHZhbCgnIiVzIi4iJXMiJyl6FnNlbGVjdCBuZXh0dmFsKCciJXMiJykpFXIUAQAAcj8AAAByFQEAAFoOc2VydmVyX2RlZmF1bHRaDGhhc19hcmd1bWVudHJ8AQAA2gNhcmdy/wAAAHIIAAAAWgtpc19zZXF1ZW5jZXIYAQAAWhRfcG9zdGdyZXNxbF9zZXFfbmFtZdoOQXR0cmlidXRlRXJyb3JyjwAAANoDbWF4cu8AAADaCmNvbm5lY3Rpb25yaAEAAHJnAAAAcnsBAADaEmdldF9pbnNlcnRfZGVmYXVsdCkIcmoAAAByIwAAAFoIc2VxX25hbWXaA3RhYnLdAAAAco8AAAByaQEAAHIEAAAAKQFyawAAAHJbAAAAclwAAABygwEAAPEIAABzNAAAAAABFgEOAwQBEgMKARQHAgEKAQ4BCAEGAR4BHgEMARACCgEGAQoDBAIKAQIBAgEKAwoCDgJ6JVBHRXhlY3V0aW9uQ29udGV4dC5nZXRfaW5zZXJ0X2RlZmF1bHRjAgAAAAAAAAACAAAAAwAAAEMAAABzCgAAAHQAoAF8AaEBUwApAU4pAtoRQVVUT0NPTU1JVF9SRUdFWFDaBW1hdGNoKQJyagAAAHIDAQAAclsAAAByWwAAAHJcAAAA2hZzaG91bGRfYXV0b2NvbW1pdF90ZXh0HwkAAHMCAAAAAAF6KVBHRXhlY3V0aW9uQ29udGV4dC5zaG91bGRfYXV0b2NvbW1pdF90ZXh0KQdyVwAAAHJYAAAAclkAAAByfQEAAHKDAQAAcocBAABybAAAAHJbAAAAclsAAAApAXJrAAAAclwAAAByewEAAOcIAABzBgAAAAgBCAkMLnJ7AQAAYwAAAAAAAAAAAAAAAAkAAAAAAAAAc0ICAABlAFoBZABaAmQBWgNkAloEZANaBWQCWgZkAloHZAJaCGQCWglkAloKZAJaC2QCWgxkBFoNZAJaDmQCWg9kBFoQZAJaEWQFWhJlE1oTZRRaFGUVWhZlF1oYZRlaGmUbWhxlHVoeZR9aIGQGWiFlImojZARkBmkAZARpAGQGZAecBmYCZSJqJGQEZAZkBmQGZAZkBmQInAZmAmcCWiVkCVomZAJaJ2QCWihkAlopZFFkCmQLhAFaKocAZgFkDGQNhAhaK2QOZA+EAFosZS1kEGQRZBJkE2cEgwFaLmQUZBWEAFovZBZkF4QAWjBkGGQZhABaMWQaZBuEAFoyZFJkHGQdhAFaM2RTZB5kH4QBWjRkIGQhhABaNWQiZCOEAFo2ZCRkJYQAWjdkVGQmZCeEAVo4ZFVkKGQphAFaOWRWZCpkK4QBWjpkLGQthABaO2U8aj1kV2QuZC+EAYMBWj5lPGo9ZDBkMYQAgwFaP2U8aj1kWGQyZDOEAYMBWkBlPGo9ZFlkNGQ1hAGDAVpBZTxqPWRaZDdkOIQBgwFaQmU8aj1kW2Q5ZDqEAYMBWkNlPGo9ZFxkO2Q8hAGDAVpEZD1kPoQAWkVlPGo9ZF1kP2RAhAGDAVpGZTxqPWReZEFkQoQBgwFaR2RDZESEAFpIZTxqPWRFZEaEAIMBWkllPGo9ZF9kR2RIhAGDAVpKZTxqPWRgZElkSoQBgwFaS2U8aj1kYWRLZEyEAYMBWkxkYmRNZE6EAVpNZE9kUIQAWk6HAAQAWk9TAClj2glQR0RpYWxlY3RyJQEAAFTpPwAAAEZaCHB5Zm9ybWF0TikGckUAAAByRgAAAHIoAQAAciYBAABySAAAAHIrAQAAKQZaEmlnbm9yZV9zZWFyY2hfcGF0aHIrAQAAcjoBAAByOwEAAHI8AQAAcjkBAAApAdodcG9zdGdyZXNxbF9pZ25vcmVfc2VhcmNoX3BhdGhjBAAAAAAAAAAFAAAAAwAAAEsAAABzJgAAAHQAagFqAnwAZgF8BI4BAQB8AXwAXwN8A3wAXwR8AnwAXwVkAFMAKQFOKQZyCAAAANoORGVmYXVsdERpYWxlY3RyaAAAANoPaXNvbGF0aW9uX2xldmVsWhJfanNvbl9kZXNlcmlhbGl6ZXJaEF9qc29uX3NlcmlhbGl6ZXIpBXJqAAAAcowBAABaD2pzb25fc2VyaWFsaXplcloRanNvbl9kZXNlcmlhbGl6ZXJyGgEAAHJbAAAAclsAAAByXAAAAHJoAAAAYQkAAHMIAAAAAAcQAQYBBgF6ElBHRGlhbGVjdC5fX2luaXRfX2MCAAAAAAAAAAIAAAAEAAAAAwAAAHOoAAAAdAB0AXwAgwKgAnwBoQEBAHwAagNkAWsEbyZ8AGoEoAVkAmQDoQJ8AF8GfABqA2QEawV8AF8HfABqB3NmfABqCKAJoQB8AF8IfABqCKAKdAtqDGQAoQIBAHwAagigCnQNZAChAgEAfABqA2QFawV8AF8OfABqA2QBawBwiHwBoA9kBqEBZAdrAnwAXxB8AGoDZAFrBXwAXxF8AGoDZAVrBXwAXxJkAFMAKQhOKQLpCAAAAHLuAAAA2hJpbXBsaWNpdF9yZXR1cm5pbmdUKQJyjQEAAHIDAAAAKQLpCQAAAHLuAAAAeiBzaG93IHN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5nc3I3AAAAKRNyZwAAAHKIAQAA2gppbml0aWFsaXpl2hNzZXJ2ZXJfdmVyc2lvbl9pbmZv2ghfX2RpY3RfX3KiAAAAco4BAABylQAAANoIY29sc3BlY3PaBGNvcHlyjAAAAHINAAAA2gRFbnVtcooAAAByFgEAANoGc2NhbGFyctEAAAByLAEAAHI1AQAAKQJyagAAAHKCAQAAKQFyawAAAHJbAAAAclwAAABykAEAAG0JAABzHgAAAAABEAEEAQYCEAEMAQYBDAIQAg4DDAMKARAEDAIEAXoUUEdEaWFsZWN0LmluaXRpYWxpemVjAQAAAAAAAAACAAAAAwAAAAMAAABzIgAAAIgAagBkAGsJchqHAGYBZAFkAoQIfQF8AVMAZABTAGQAUwApA05jAQAAAAAAAAABAAAABAAAABMAAABzEgAAAIgAoAB8AIgAagGhAgEAZABTACkBTikC2hNzZXRfaXNvbGF0aW9uX2xldmVscowBAAApAXJtAQAAKQFyagAAAHJbAAAAclwAAADaB2Nvbm5lY3SOCQAAcwIAAAAAAXolUEdEaWFsZWN0Lm9uX2Nvbm5lY3QuPGxvY2Fscz4uY29ubmVjdCkBcowBAAApAnJqAAAAcpgBAAByWwAAACkBcmoAAAByXAAAANoKb25fY29ubmVjdIsJAABzCAAAAAABCgIMAwQCehRQR0RpYWxlY3Qub25fY29ubmVjdFoMU0VSSUFMSVpBQkxFehBSRUFEIFVOQ09NTUlUVEVEeg5SRUFEIENPTU1JVFRFRHoPUkVQRUFUQUJMRSBSRUFEYwMAAAAAAAAABAAAAAgAAABDAAAAc2AAAAB8AqAAZAFkAqECfQJ8AnwAagFrB3I0dAKgA2QDfAJ8AGoEZASgBXwAagGhAWYDFgChAYIBfAGgBqEAfQN8A6AHZAV8AhYAoQEBAHwDoAdkBqEBAQB8A6AIoQABAGQAUwApB05yPQEAAHITAQAAekxJbnZhbGlkIHZhbHVlICclcycgZm9yIGlzb2xhdGlvbl9sZXZlbC4gVmFsaWQgaXNvbGF0aW9uIGxldmVscyBmb3IgJXMgYXJlICVzegIsIHo9U0VUIFNFU1NJT04gQ0hBUkFDVEVSSVNUSUNTIEFTIFRSQU5TQUNUSU9OIElTT0xBVElPTiBMRVZFTCAlc1oGQ09NTUlUKQly0gAAANoRX2lzb2xhdGlvbl9sb29rdXByBAAAANoNQXJndW1lbnRFcnJvcnKPAAAAck0AAADaBmN1cnNvcnKXAAAA2gVjbG9zZSkEcmoAAAByggEAANoFbGV2ZWxynAEAAHJbAAAAclsAAAByXAAAAHKXAQAAngkAAHMWAAAAAAEMAQoBBAECAhgCCAEEAQIBCAIKAXodUEdEaWFsZWN0LnNldF9pc29sYXRpb25fbGV2ZWxjAgAAAAAAAAAEAAAAAwAAAEMAAABzLgAAAHwBoAChAH0CfAKgAWQBoQEBAHwCoAKhAGQCGQB9A3wCoAOhAAEAfAOgBKEAUwApA056IHNob3cgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVscgEAAAApBXKcAQAAcpcAAABaCGZldGNob25lcp0BAABy2AAAACkEcmoAAAByggEAAHKcAQAA2gN2YWxyWwAAAHJbAAAAclwAAADaE2dldF9pc29sYXRpb25fbGV2ZWyuCQAAcwoAAAAAAQgBCgEMAQgBeh1QR0RpYWxlY3QuZ2V0X2lzb2xhdGlvbl9sZXZlbGMDAAAAAAAAAAMAAAADAAAAQwAAAHMQAAAAfACgAHwBagGhAQEAZABTACkBTikCWghkb19iZWdpbnKCAQAAKQNyagAAAHKCAQAA2gN4aWRyWwAAAHJbAAAAclwAAADaEWRvX2JlZ2luX3R3b3BoYXNltQkAAHMCAAAAAAF6G1BHRGlhbGVjdC5kb19iZWdpbl90d29waGFzZWMDAAAAAAAAAAMAAAAEAAAAQwAAAHMSAAAAfAGgAGQBfAIWAKEBAQBkAFMAKQJOehhQUkVQQVJFIFRSQU5TQUNUSU9OICclcycpAXKXAAAAKQNyagAAAHKCAQAAcqEBAAByWwAAAHJbAAAAclwAAADaE2RvX3ByZXBhcmVfdHdvcGhhc2W4CQAAcwIAAAAAAXodUEdEaWFsZWN0LmRvX3ByZXBhcmVfdHdvcGhhc2VjBQAAAAAAAAAFAAAABAAAAEMAAABzSAAAAHwDcjh8BHISfAGgAGQBoQEBAHwBoABkAnwCFgChAQEAfAGgAGQDoQEBAHwAoAF8AWoCoQEBAG4MfACgAXwBagKhAQEAZABTACkETtoIUk9MTEJBQ0t6FlJPTExCQUNLIFBSRVBBUkVEICclcyfaBUJFR0lOKQNylwAAANoLZG9fcm9sbGJhY2tyggEAACkFcmoAAAByggEAAHKhAQAA2gtpc19wcmVwYXJlZNoHcmVjb3ZlcnJbAAAAclsAAAByXAAAANoUZG9fcm9sbGJhY2tfdHdvcGhhc2W7CQAAcw4AAAAAAwQBBAUKAQ4BCgEOAnoeUEdEaWFsZWN0LmRvX3JvbGxiYWNrX3R3b3BoYXNlYwUAAAAAAAAABQAAAAQAAABDAAAAc0gAAAB8A3I4fARyEnwBoABkAaEBAQB8AaAAZAJ8AhYAoQEBAHwBoABkA6EBAQB8AKABfAFqAqEBAQBuDHwAoAN8AWoCoQEBAGQAUwApBE5ypAEAAHoUQ09NTUlUIFBSRVBBUkVEICclcydypQEAACkEcpcAAABypgEAAHKCAQAAWglkb19jb21taXQpBXJqAAAAcoIBAAByoQEAAHKnAQAAcqgBAAByWwAAAHJbAAAAclwAAADaEmRvX2NvbW1pdF90d29waGFzZcsJAABzDgAAAAADBAEEAQoBDgEKAQ4CehxQR0RpYWxlY3QuZG9fY29tbWl0X3R3b3BoYXNlYwIAAAAAAAAAAwAAAAUAAABDAAAAcx4AAAB8AaAAdAGgAmQBoQGhAX0CZAJkA4QAfAJEAIMBUwApBE56IVNFTEVDVCBnaWQgRlJPTSBwZ19wcmVwYXJlZF94YWN0c2MBAAAAAAAAAAIAAAAEAAAAUwAAAHMUAAAAZwB8AF0MfQF8AWQAGQCRAnEEUwApAXIBAAAAclsAAAApAnLMAAAA2gNyb3dyWwAAAHJbAAAAclwAAABy3gAAANsJAABzAgAAAAYAejFQR0RpYWxlY3QuZG9fcmVjb3Zlcl90d29waGFzZS48bG9jYWxzPi48bGlzdGNvbXA+KQNylwAAAHIGAAAAcqsAAAApA3JqAAAAcoIBAABaCXJlc3VsdHNldHJbAAAAclsAAAByXAAAANoTZG9fcmVjb3Zlcl90d29waGFzZdcJAABzBgAAAAABBAEMAnodUEdEaWFsZWN0LmRvX3JlY292ZXJfdHdvcGhhc2VjAgAAAAAAAAACAAAAAwAAAEMAAABzCgAAAHwBoABkAaEBUwApAk56F3NlbGVjdCBjdXJyZW50X3NjaGVtYSgpKQFylgEAACkCcmoAAAByggEAAHJbAAAAclsAAAByXAAAANoYX2dldF9kZWZhdWx0X3NjaGVtYV9uYW1l3QkAAHMCAAAAAAF6IlBHRGlhbGVjdC5fZ2V0X2RlZmF1bHRfc2NoZW1hX25hbWVjAwAAAAAAAAAFAAAACgAAAEMAAABzPgAAAGQBfQN8AaAAdAGgAnwDoQGgA3QBagRkAnQFoAZ8AqAHoQChAXQIaglkA40DoQGhAX0EdAp8BKALoQCDAVMAKQROej1zZWxlY3QgbnNwbmFtZSBmcm9tIHBnX25hbWVzcGFjZSB3aGVyZSBsb3dlcihuc3BuYW1lKT06c2NoZW1hcgUAAAApAXLNAAAAKQxylwAAAHIGAAAAcqsAAADaCmJpbmRwYXJhbXPaCWJpbmRwYXJhbXIHAAAAcoIAAAByMQEAAHINAAAA2gdVbmljb2Rl2gRib29s2gVmaXJzdCkFcmoAAAByggEAAHIFAAAA2gVxdWVyeXKcAQAAclsAAAByWwAAAHJcAAAA2gpoYXNfc2NoZW1h4AkAAHMQAAAAAAIEAgQBCgEEAQIBDAEOBXoUUEdEaWFsZWN0Lmhhc19zY2hlbWFjBAAAAAAAAAAFAAAACgAAAEMAAABzgAAAAHwDZABrCHI0fAGgAHQBoAJkAaEBoAN0AWoEZAJ0BaAGfAKhAXQHaghkA40DoQGhAX0EbkB8AaAAdAGgAmQEoQGgA3QBagRkAnQFoAZ8AqEBdAdqCGQDjQN0AWoEZAV0BaAGfAOhAXQHaghkA40DoQKhAX0EdAl8BKAKoQCDAVMAKQZOeohzZWxlY3QgcmVsbmFtZSBmcm9tIHBnX2NsYXNzIGMgam9pbiBwZ19uYW1lc3BhY2UgbiBvbiBuLm9pZD1jLnJlbG5hbWVzcGFjZSB3aGVyZSBwZ19jYXRhbG9nLnBnX3RhYmxlX2lzX3Zpc2libGUoYy5vaWQpIGFuZCByZWxuYW1lPTpuYW1lco8AAAApAXLNAAAAenRzZWxlY3QgcmVsbmFtZSBmcm9tIHBnX2NsYXNzIGMgam9pbiBwZ19uYW1lc3BhY2UgbiBvbiBuLm9pZD1jLnJlbG5hbWVzcGFjZSB3aGVyZSBuLm5zcG5hbWU9OnNjaGVtYSBhbmQgcmVsbmFtZT06bmFtZXIFAAAAKQtylwAAAHIGAAAAcqsAAAByrgEAAHKvAQAAcgcAAAByggAAAHINAAAAcrABAABysQEAAHKyAQAAKQVyagAAAHKCAQAAcnABAAByBQAAAHKcAQAAclsAAAByWwAAAHJcAAAA2gloYXNfdGFibGXwCQAAcygAAAAAAggBBAEEAQYFBAECAQgBEAUEAQQBBgQEAQIBCAEIAgQBAgEIAQ4EehNQR0RpYWxlY3QuaGFzX3RhYmxlYwQAAAAAAAAABQAAAAoAAABDAAAAc4AAAAB8A2QAawhyNHwBoAB0AaACZAGhAaADdAFqBGQCdAWgBnwCoQF0B2oIZAONA6EBoQF9BG5AfAGgAHQBoAJkBKEBoAN0AWoEZAJ0BaAGfAKhAXQHaghkA40DdAFqBGQFdAWgBnwDoQF0B2oIZAONA6ECoQF9BHQJfASgCqEAgwFTACkGTnqNU0VMRUNUIHJlbG5hbWUgRlJPTSBwZ19jbGFzcyBjIGpvaW4gcGdfbmFtZXNwYWNlIG4gb24gbi5vaWQ9Yy5yZWxuYW1lc3BhY2Ugd2hlcmUgcmVsa2luZD0nUycgYW5kIG4ubnNwbmFtZT1jdXJyZW50X3NjaGVtYSgpIGFuZCByZWxuYW1lPTpuYW1lco8AAAApAXLNAAAAeoRTRUxFQ1QgcmVsbmFtZSBGUk9NIHBnX2NsYXNzIGMgam9pbiBwZ19uYW1lc3BhY2UgbiBvbiBuLm9pZD1jLnJlbG5hbWVzcGFjZSB3aGVyZSByZWxraW5kPSdTJyBhbmQgbi5uc3BuYW1lPTpzY2hlbWEgYW5kIHJlbG5hbWU9Om5hbWVyBQAAACkLcpcAAAByBgAAAHKrAAAAcq4BAAByrwEAAHIHAAAAcoIAAAByDQAAAHKwAQAAcrEBAABysgEAACkFcmoAAAByggEAAFoNc2VxdWVuY2VfbmFtZXIFAAAAcpwBAAByWwAAAHJbAAAAclwAAADaDGhhc19zZXF1ZW5jZRYKAABzKAAAAAABCAEEAQQBBgUEAQIBCAEQBQQBBAEGBAQBAgEIAQgCBAECAQgBDgV6FlBHRGlhbGVjdC5oYXNfc2VxdWVuY2VjBAAAAAAAAAAGAAAABwAAAEMAAABzgAAAAHwDZABrCXIYZAF9BHQAoAF8BKEBfQRuDmQCfQR0AKABfAShAX0EfASgAnQAagNkA3QEoAV8AqEBdAZqB2QEjQOhAX0EfANkAGsJcmp8BKACdABqA2QFdASgBXwDoQF0BmoHZASNA6EBfQR8AaAIfAShAX0FdAl8BaAKoQCDAVMAKQZOYQwBAAAKICAgICAgICAgICAgU0VMRUNUIEVYSVNUUyAoCiAgICAgICAgICAgICAgICBTRUxFQ1QgKiBGUk9NIHBnX2NhdGFsb2cucGdfdHlwZSB0LCBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuCiAgICAgICAgICAgICAgICBXSEVSRSB0LnR5cG5hbWVzcGFjZSA9IG4ub2lkCiAgICAgICAgICAgICAgICBBTkQgdC50eXBuYW1lID0gOnR5cG5hbWUKICAgICAgICAgICAgICAgIEFORCBuLm5zcG5hbWUgPSA6bnNwbmFtZQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgessKICAgICAgICAgICAgU0VMRUNUIEVYSVNUUyAoCiAgICAgICAgICAgICAgICBTRUxFQ1QgKiBGUk9NIHBnX2NhdGFsb2cucGdfdHlwZSB0CiAgICAgICAgICAgICAgICBXSEVSRSB0LnR5cG5hbWUgPSA6dHlwbmFtZQogICAgICAgICAgICAgICAgQU5EIHBnX3R5cGVfaXNfdmlzaWJsZSh0Lm9pZCkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIFoHdHlwbmFtZSkBcs0AAADaB25zcG5hbWUpC3IGAAAAcqsAAAByrgEAAHKvAQAAcgcAAAByggAAAHINAAAAcrABAABylwAAAHKxAQAAcpYBAAApBnJqAAAAcoIBAADaCXR5cGVfbmFtZXIFAAAAcrMBAABynAEAAHJbAAAAclsAAAByXAAAAHKWAAAAPAoAAHMcAAAAAAEICAQBDAgEAQoBBAEEARYDCAEEAQQBFgMKAXoSUEdEaWFsZWN0Lmhhc190eXBlYwIAAAAAAAAABAAAAAcAAABDAAAAc0YAAAB8AaAAZAGhAaABoQB9AnQCoANkAnwCoQJ9A3wDcyp0BGQDfAIWAIMBggF0BWQEZAWEAHwDoAZkBmQHZAihA0QAgwGDAVMAKQlOehBzZWxlY3QgdmVyc2lvbigpelEuKig/OlBvc3RncmVTUUx8RW50ZXJwcmlzZURCKSAoXGQrKVwuPyhcZCspPyg/OlwuKFxkKykpPyg/OlwuXGQrKT8oPzpkZXZlbHxiZXRhKT96LENvdWxkIG5vdCBkZXRlcm1pbmUgdmVyc2lvbiBmcm9tIHN0cmluZyAnJXMnYwEAAAAAAAAAAgAAAAQAAABTAAAAcxwAAABnAHwAXRR9AXwBZABrCXIEdAB8AYMBkQJxBFMAKQFOKQHaA2ludCkCcswAAADaAXhyWwAAAHJbAAAAclwAAABy3gAAAGkKAABzAgAAAAYAejZQR0RpYWxlY3QuX2dldF9zZXJ2ZXJfdmVyc2lvbl9pbmZvLjxsb2NhbHM+LjxsaXN0Y29tcD5yfAAAAHLuAAAAcgMAAAApB3KXAAAAcpYBAAByYgEAAHKGAQAA2g5Bc3NlcnRpb25FcnJvcnLhAAAAci4AAAApBHJqAAAAcoIBAAByBwEAANoBbXJbAAAAclsAAAByXAAAANoYX2dldF9zZXJ2ZXJfdmVyc2lvbl9pbmZvXgoAAHMQAAAAAAEOAQQBAgIGAgQBAgEKAnoiUEdEaWFsZWN0Ll9nZXRfc2VydmVyX3ZlcnNpb25faW5mb2MEAAAAAAAAAAoAAAAGAAAASwAAAHOkAAAAZAF9BXwDZAFrCXISZAJ9Bm4EZAN9BmQEfAYWAH0HdACgAXwCoQF9AnwDZAFrCXI6dACgAXwDoQF9A3QCoAN8B6EBagR0BWoGZAWNAX0IfAhqB3QFaghkBo0BfQh8A3J2fAigBHQCaglkB3QFagZkCI0CoQF9CHwBagp8CHwCfANkCY0DfQl8CaALoQB9BXwFZAFrCHKgdAygDXwCoQGCAXwFUwApCnrdRmV0Y2ggdGhlIG9pZCBmb3Igc2NoZW1hLnRhYmxlX25hbWUuCgogICAgICAgIFNldmVyYWwgcmVmbGVjdGlvbiBtZXRob2RzIHJlcXVpcmUgdGhlIHRhYmxlIG9pZC4gIFRoZSBpZGVhIGZvciB1c2luZwogICAgICAgIHRoaXMgbWV0aG9kIGlzIHRoYXQgaXQgY2FuIGJlIGZldGNoZWQgb25lIHRpbWUgYW5kIGNhY2hlZCBmb3IKICAgICAgICBzdWJzZXF1ZW50IGNhbGxzLgoKICAgICAgICBOehNuLm5zcG5hbWUgPSA6c2NoZW1heiVwZ19jYXRhbG9nLnBnX3RhYmxlX2lzX3Zpc2libGUoYy5vaWQpYQkBAAAKICAgICAgICAgICAgU0VMRUNUIGMub2lkCiAgICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjCiAgICAgICAgICAgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gYy5yZWxuYW1lc3BhY2UKICAgICAgICAgICAgV0hFUkUgKCVzKQogICAgICAgICAgICBBTkQgYy5yZWxuYW1lID0gOnRhYmxlX25hbWUgQU5EIGMucmVsa2luZCBpbgogICAgICAgICAgICAoJ3InLCAndicsICdtJywgJ2YnLCAncCcpCiAgICAgICAgKQFycAEAACkBcrEAAAByBQAAACkBcs0AAAApAnJwAQAAcgUAAAApDnIHAAAAcoIAAAByBgAAAHKrAAAAcq4BAAByDQAAAHKwAQAAcuwAAADaB0ludGVnZXJyrwEAAHKXAAAAcpYBAAByBAAAAFoQTm9TdWNoVGFibGVFcnJvcikKcmoAAAByggEAAHJwAQAAcgUAAABycgAAANoJdGFibGVfb2lkWhNzY2hlbWFfd2hlcmVfY2xhdXNlcrMBAABy8QAAAHLpAAAAclsAAAByWwAAAHJcAAAAcm8BAABrCgAAcyQAAAAACQQBCAEGAgQJAgEGBAoBCAEKARQBDgEEARYBEAEIAQgBCgF6F1BHRGlhbGVjdC5nZXRfdGFibGVfb2lkYwIAAAAAAAAABAAAAAUAAABLAAAAcygAAAB8AaAAdAGgAmQBoQFqA3QEagVkAo0BoQF9A2QDZASEAHwDRACDAVMAKQVOek9TRUxFQ1QgbnNwbmFtZSBGUk9NIHBnX25hbWVzcGFjZSBXSEVSRSBuc3BuYW1lIE5PVCBMSUtFICdwZ18lJyBPUkRFUiBCWSBuc3BuYW1lKQFytwEAAGMBAAAAAAAAAAIAAAADAAAAUwAAAHMSAAAAZwB8AF0KXAF9AXwBkQJxBFMAclsAAAByWwAAACkCcswAAAByjwAAAHJbAAAAclsAAAByXAAAAHLeAAAAnAoAAHMCAAAABgB6LlBHRGlhbGVjdC5nZXRfc2NoZW1hX25hbWVzLjxsb2NhbHM+LjxsaXN0Y29tcD4pBnKXAAAAcgYAAAByqwAAAHLsAAAAcg0AAABysAEAACkEcmoAAAByggEAAHJyAAAA2gZyZXN1bHRyWwAAAHJbAAAAclwAAADaEGdldF9zY2hlbWFfbmFtZXOTCgAAcwoAAAAAAgQBBAEGAwwCehpQR0RpYWxlY3QuZ2V0X3NjaGVtYV9uYW1lc2MDAAAAAAAAAAUAAAAEAAAASwAAAHM6AAAAfAFqAHQBoAJkAaEBagN0BGoFZAKNAXwCZABrCXIifAJuBHwAagZkA40CfQRkBGQFhAB8BEQAgwFTACkGTnqEU0VMRUNUIGMucmVsbmFtZSBGUk9NIHBnX2NsYXNzIGMgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlIFdIRVJFIG4ubnNwbmFtZSA9IDpzY2hlbWEgQU5EIGMucmVsa2luZCBpbiAoJ3InLCAncCcpKQHaB3JlbG5hbWUpAXIFAAAAYwEAAAAAAAAAAgAAAAMAAABTAAAAcxIAAABnAHwAXQpcAX0BfAGRAnEEUwByWwAAAHJbAAAAKQJyzAAAAHKPAAAAclsAAAByWwAAAHJcAAAAct4AAACoCgAAcwIAAAAGAHotUEdEaWFsZWN0LmdldF90YWJsZV9uYW1lcy48bG9jYWxzPi48bGlzdGNvbXA+KQdylwAAAHIGAAAAcqsAAABy7AAAAHINAAAAcrABAABycQEAACkFcmoAAAByggEAAHIFAAAAcnIAAABywAEAAHJbAAAAclsAAAByXAAAANoPZ2V0X3RhYmxlX25hbWVzngoAAHMMAAAAAAIEAQQBBgMIARYCehlQR0RpYWxlY3QuZ2V0X3RhYmxlX25hbWVzYwMAAAAAAAAABQAAAAQAAABLAAAAczoAAAB8AWoAdAGgAmQBoQFqA3QEagVkAo0BfAJkAGsJciJ8Am4EfABqBmQDjQJ9BGQEZAWEAHwERACDAVMAKQZOenxTRUxFQ1QgYy5yZWxuYW1lIEZST00gcGdfY2xhc3MgYyBKT0lOIHBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gYy5yZWxuYW1lc3BhY2UgV0hFUkUgbi5uc3BuYW1lID0gOnNjaGVtYSBBTkQgYy5yZWxraW5kID0gJ2YnKQFywgEAACkBcgUAAABjAQAAAAAAAAACAAAAAwAAAFMAAABzEgAAAGcAfABdClwBfQF8AZECcQRTAHJbAAAAclsAAAApAnLMAAAAco8AAAByWwAAAHJbAAAAclwAAABy3gAAALQKAABzAgAAAAYAejZQR0RpYWxlY3QuX2dldF9mb3JlaWduX3RhYmxlX25hbWVzLjxsb2NhbHM+LjxsaXN0Y29tcD4pB3KXAAAAcgYAAAByqwAAAHLsAAAAcg0AAABysAEAAHJxAQAAKQVyagAAAHKCAQAAcgUAAABycgAAAHLAAQAAclsAAAByWwAAAHJcAAAAcnQBAACqCgAAcwwAAAAAAgQBBAEGAwgBFgJ6IlBHRGlhbGVjdC5fZ2V0X2ZvcmVpZ25fdGFibGVfbmFtZXOpAnJ3AQAAcngBAABjBAAAAAAAAAAHAAAACAAAAAsAAABzpAAAAGQBZAJkA5wCiQB5HIcAZgFkBGQFhAh0AKABfAOhAUQAgwF9BVcAbiIEAHQCawpySAEAAQABAHQDZAZ8A2YBFgCDAYIBWQBuAlgAfAVzVnQDZAeDAYIBfAFqBHQFoAZkCGQJoAdkCmQLhAB8BUQAgwGhARYAoQFqCHQJagpkDI0BfAJkAGsJcox8Am4EfABqC2QNjQJ9BmQOZAWEAHwGRACDAVMAKQ9OcgcBAAByvAEAACkCcncBAAByeAEAAGMBAAAAAAAAAAIAAAAEAAAAEwAAAHMUAAAAZwB8AF0MfQGIAHwBGQCRAnEEUwByWwAAAHJbAAAAKQJyzAAAANoBaSkB2gxpbmNsdWRlX2tpbmRyWwAAAHJcAAAAct4AAAC9CgAAcwIAAAAGAHosUEdEaWFsZWN0LmdldF92aWV3X25hbWVzLjxsb2NhbHM+LjxsaXN0Y29tcD56X2luY2x1ZGUgJXIgdW5rbm93biwgbmVlZHMgdG8gYmUgYSBzZXF1ZW5jZSBjb250YWluaW5nIG9uZSBvciBib3RoIG9mICdwbGFpbicgYW5kICdtYXRlcmlhbGl6ZWQnelplbXB0eSBpbmNsdWRlLCBuZWVkcyB0byBiZSBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgb25lIG9yIGJvdGggb2YgJ3BsYWluJyBhbmQgJ21hdGVyaWFsaXplZCd6flNFTEVDVCBjLnJlbG5hbWUgRlJPTSBwZ19jbGFzcyBjIEpPSU4gcGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZSBXSEVSRSBuLm5zcG5hbWUgPSA6c2NoZW1hIEFORCBjLnJlbGtpbmQgSU4gKCVzKXoCLCBjAQAAAAAAAAACAAAAAwAAAHMAAABzFgAAAHwAXQ59AWQAfAEWAFYAAQBxAmQBUwApAnoEJyVzJ05yWwAAACkCcswAAADaBGVsZW1yWwAAAHJbAAAAclwAAAByzgAAAM4KAABzAgAAAAQAeitQR0RpYWxlY3QuZ2V0X3ZpZXdfbmFtZXMuPGxvY2Fscz4uPGdlbmV4cHI+KQFywgEAACkBcgUAAABjAQAAAAAAAAACAAAAAwAAAFMAAABzEgAAAGcAfABdClwBfQF8AZECcQRTAHJbAAAAclsAAAApAnLMAAAAco8AAAByWwAAAHJbAAAAclwAAABy3gAAANIKAABzAgAAAAYAKQxyBwAAAFoHdG9fbGlzdNoIS2V5RXJyb3LaClZhbHVlRXJyb3JylwAAAHIGAAAAcqsAAAByTQAAAHLsAAAAcg0AAABysAEAAHJxAQAAKQdyagAAAHKCAQAAcgUAAAByeQEAAHJyAAAAWgVraW5kc3LAAQAAclsAAAApAXLGAQAAclwAAAByegEAALYKAABzIgAAAAAFCgECARwBDgECAQIBEAIEAQIBBgQEAQQBAgMYAQgBFgJ6GFBHRGlhbGVjdC5nZXRfdmlld19uYW1lc2MEAAAAAAAAAAYAAAAFAAAASwAAAHMyAAAAfAFqAHQBoAJkAaEBagN0BGoFZAKNAXwDZABrCXIifANuBHwAagZ8AmQDjQN9BXwFUwApBE56tFNFTEVDVCBwZ19nZXRfdmlld2RlZihjLm9pZCkgdmlld19kZWYgRlJPTSBwZ19jbGFzcyBjIEpPSU4gcGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZSBXSEVSRSBuLm5zcG5hbWUgPSA6c2NoZW1hIEFORCBjLnJlbG5hbWUgPSA6dmlld19uYW1lIEFORCBjLnJlbGtpbmQgSU4gKCd2JywgJ20nKSkB2gh2aWV3X2RlZikCcgUAAADaCXZpZXdfbmFtZSkHcpYBAAByBgAAAHKrAAAAcuwAAAByDQAAAHKwAQAAcnEBAAApBnJqAAAAcoIBAAByywEAAHIFAAAAcnIAAAByygEAAHJbAAAAclsAAAByXAAAANoTZ2V0X3ZpZXdfZGVmaW5pdGlvbtQKAABzDgAAAAACBAEEAQYECAEQAQgCeh1QR0RpYWxlY3QuZ2V0X3ZpZXdfZGVmaW5pdGlvbmMEAAAAAAAAABQAAAALAAAASwAAAHPIAAAAfABqAHwBfAJ8A3wEoAFkAaEBZAKNBH0FZAN9BnQCoAN8BqEBoAR0AmoFZAR0BmoHZAWNAqEBagh0BmoJdAZqCWQGjQJ9B3wBagp8B3wFZAeNAn0IfAigC6EAfQl8AKAMfAGhAX0KdA1kCGQJhAB8AGoOfAFkCmQLjQJEAIMBgwF9C2cAfQx4PHwJRABdNFwHfQ19Dn0PfRB9EX0FfRJ8AKAPfA18DnwPfBB8CnwLfAN8EqEIfRN8DKAQfBOhAQEAcYxXAHwMUwApDE5ybgEAACkBcm4BAABh3gIAAAogICAgICAgICAgICBTRUxFQ1QgYS5hdHRuYW1lLAogICAgICAgICAgICAgIHBnX2NhdGFsb2cuZm9ybWF0X3R5cGUoYS5hdHR0eXBpZCwgYS5hdHR0eXBtb2QpLAogICAgICAgICAgICAgIChTRUxFQ1QgcGdfY2F0YWxvZy5wZ19nZXRfZXhwcihkLmFkYmluLCBkLmFkcmVsaWQpCiAgICAgICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfYXR0cmRlZiBkCiAgICAgICAgICAgICAgIFdIRVJFIGQuYWRyZWxpZCA9IGEuYXR0cmVsaWQgQU5EIGQuYWRudW0gPSBhLmF0dG51bQogICAgICAgICAgICAgICBBTkQgYS5hdHRoYXNkZWYpCiAgICAgICAgICAgICAgQVMgREVGQVVMVCwKICAgICAgICAgICAgICBhLmF0dG5vdG51bGwsIGEuYXR0bnVtLCBhLmF0dHJlbGlkIGFzIHRhYmxlX29pZCwKICAgICAgICAgICAgICBwZ2QuZGVzY3JpcHRpb24gYXMgY29tbWVudAogICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfYXR0cmlidXRlIGEKICAgICAgICAgICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfZGVzY3JpcHRpb24gcGdkIE9OICgKICAgICAgICAgICAgICAgIHBnZC5vYmpvaWQgPSBhLmF0dHJlbGlkIEFORCBwZ2Qub2Jqc3ViaWQgPSBhLmF0dG51bSkKICAgICAgICAgICAgV0hFUkUgYS5hdHRyZWxpZCA9IDp0YWJsZV9vaWQKICAgICAgICAgICAgQU5EIGEuYXR0bnVtID4gMCBBTkQgTk9UIGEuYXR0aXNkcm9wcGVkCiAgICAgICAgICAgIE9SREVSIEJZIGEuYXR0bnVtCiAgICAgICAgcr8BAAApAXLNAAAAKQLaB2F0dG5hbWVyCAAAACkBcr8BAABjAQAAAAAAAAACAAAABAAAAHMAAABzOAAAAHwAXTB9AXwBZAAZAHIcfAFkARkAZgF8AWYCbhJ8AWQCGQB8AWQBGQBmAnwBZgJWAAEAcQJkA1MAKQTaB3Zpc2libGVyjwAAAHIFAAAATnJbAAAAKQJyzAAAAFoDcmVjclsAAAByWwAAAHJcAAAAcs4AAAAICwAAcwIAAAAEA3ooUEdEaWFsZWN0LmdldF9jb2x1bW5zLjxsb2NhbHM+LjxnZW5leHByPtoBKikBcgUAAAApEXJvAQAAcqIAAAByBgAAAHKrAAAAcq4BAAByrwEAAHINAAAAcr4BAABy7AAAAHKwAQAAcpcAAADaCGZldGNoYWxs2g1fbG9hZF9kb21haW5zcvwAAABycgEAANoQX2dldF9jb2x1bW5faW5mb3IBAQAAKRRyagAAAHKCAQAAcnABAAByBQAAAHJyAAAAcr8BAABaCFNRTF9DT0xTcvEAAABy6QAAAFoEcm93c9oHZG9tYWluc3KNAAAAcuwAAAByjwAAAHIiAQAAWghkZWZhdWx0X3JPAAAAWgZhdHRudW3aB2NvbW1lbnTaC2NvbHVtbl9pbmZvclsAAAByWwAAAHJcAAAA2gtnZXRfY29sdW1uc+IKAABzNAAAAAADBAEUEgQCCgESAQ4CDgEIBAoEAgEGAxQEBAICCBYBBAECAQIBAgECAQIBAgECAQYCDgF6FVBHRGlhbGVjdC5nZXRfY29sdW1uc2MJAAAAAAAAABsAAAAIAAAAQwAAAHNOAwAAZAFkAoQAfQl0AKABZANkBHwCoQN9CnwJfAqDAVwCfQp9C3QCdAOgBHwKoQGDAX0MfAQMAH0NdACgBWQFfAKhAn0OfA5yUHwOoAZkBqEBfQ50AKAFZAd8AqECfQ98D3KCfA+gBmQGoQFygnQCdACgB2QIfA+gBmQGoQGhAoMBfQ9uBGQJfQ9pAH0QfApkCmsCcrx8DnK2fA6gB2QLoQFcAn0RfRJ0CHwRgwF0CHwSgwFmAn0PbgRkCX0PbvJ8CmQMawJyymQNfQ9u5HwKZA5rAnLYZAl9D27WfApkD2sGcv5kEHwQZBE8AHwOcvh0CHwOgwF8EGQSPABkCX0PbrB8CmQTawaQAXIoZBR8EGQRPAB8DpABciJ0CHwOgwF8EGQSPABkCX0PboZ8CmQVawKQAXJSZBB8EGQWPAB8DpABckx0CHwOgwFmAX0PbgRkCX0Pblx8CqAJZBehAZABcp50AKAKZBh8CnQAaguhA30TfA6QAXKAdAh8DoMBfBBkEjwAfBOQAXKUfBOgBmQGoQF8EGQZPABkF30KZAl9D24QfA6QAXKudAh8DoMBZgF9D3jIfAp8AGoMawaQAXLKfABqDHwKGQB9FFAAbqh8DHwGawaQAnISfAZ8DBkAfRV0DX0UfBVkGhkAfBBkGjwAfBVkGxkAkAJzAnwVZBwZAHwQZBw8AHQCfBVkHRkAgwF9D1AAbmB8DHwFawaQAnJsfAV8DBkAfRZ8FmQeGQB9CnwJfAqDAVwCfQp9C3QCdAOgBHwKoQGDAX0MfBZkHxkAfQ18FmQgGQCQAXKwfAOQAXOwfBZkIBkAfQOQAXGwbgZkAH0UUACQAXGwVwB8FJACcp58FHwPfBCOAX0UfAuQAnK2fABqDGQhGQB8FIMBfRRuGHQDoA5kInwKfAFmAhYAoQEBAHQPahB9FGQUfRd8A2QAawmQA3I2dACgBWQjfAOhAn0YfBhkAGsJkANyNnQRfBRqEnQPahODApACcu5kEH0XfAd9GWQkfBigBmQloQFrB5ADcjZ8GWQAawmQA3I2fBigBmQGoQFkJnwZFgAXAGQkFwB8GKAGZCWhARcAfBigBmQnoQEXAH0DdBR8AXwUfA18A3wXfAhkKI0GfRp8GlMAKSlOYwEAAAAAAAAAAQAAAAUAAABTAAAAcxgAAAB0AKABZAFkAnwAoQN8AKACZAOhAWYCUwApBE56BVxbXF0kcscAAAB6AltdKQNyYgEAAHJjAQAA2ghlbmRzd2l0aCkB2gZhdHR5cGVyWwAAAHJbAAAAclwAAADaEl9oYW5kbGVfYXJyYXlfdHlwZTILAABzBAAAAAADDAF6NlBHRGlhbGVjdC5fZ2V0X2NvbHVtbl9pbmZvLjxsb2NhbHM+Ll9oYW5kbGVfYXJyYXlfdHlwZXoGXCguKlwpcscAAAB6DFwoKFtcZCxdKylcKXJ8AAAAeghcKCguKilcKXoHXHMqLFxzKnJbAAAAcqwAAAD6ASx6EGRvdWJsZSBwcmVjaXNpb24pAek1AAAAcqkAAAApAnoYdGltZXN0YW1wIHdpdGggdGltZSB6b25lehN0aW1lIHdpdGggdGltZSB6b25lVHJmAAAAcmkAAAApA3obdGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lehZ0aW1lIHdpdGhvdXQgdGltZSB6b25lcrQAAABGegtiaXQgdmFyeWluZ3J+AAAAcnEAAAB6DWludGVydmFsICguKylybwAAAHKPAAAAcs4BAAByBQAAANoGbGFiZWxzctgBAAByGQEAAHIIAAAAWgZfYXJyYXl6KkRpZCBub3QgcmVjb2duaXplIHR5cGUgJyVzJyBvZiBjb2x1bW4gJyVzJ3oZKG5leHR2YWxcKCcpKFteJ10rKSgnLiokKXJnAQAAcu4AAAB6BCIlcyJyAwAAACkGco8AAABy/wAAAHIZAQAAcggAAADaDWF1dG9pbmNyZW1lbnRy1AEAACkVcmIBAAByYwEAAHLhAAAAcgcAAABaE3F1b3RlZF90b2tlbl9wYXJzZXLaBnNlYXJjaHIuAAAA2gVzcGxpdHK5AQAA2gpzdGFydHN3aXRocoYBAADaAUnaDWlzY2hlbWFfbmFtZXNyigAAAHICAQAAcg0AAABaCE5VTExUWVBF2gppc3N1YmNsYXNzcnUAAAByvgEAAHL8AAAAKRtyagAAAHKPAAAAciIBAAByCAAAAHJPAAAActMBAAByjQAAAHIFAAAActQBAABy2QEAAHLYAQAAWghpc19hcnJheVoSZW51bV9vcl9kb21haW5fa2V5chkBAABaB2NoYXJsZW7aBGFyZ3NyGgEAAFoEcHJlY1oFc2NhbGVaC2ZpZWxkX21hdGNococAAADaBGVudW3aBmRvbWFpbnLdAQAAcoYBAABaA3NjaHLVAQAAclsAAAByWwAAAHJcAAAActIBAAAnCwAAc74AAAAACwgJDgMMAw4CBgIMAQQBCgEMAQ4BGAIEAQQCCAEEAQ4BEgIGAQgBBgEIAQYBCAEIAQQBDAEGAQIBCAQIAQYBDAEGAQoBCAEGAQwCBgEMARABBgEMAQYBDgEEAQYBBgEKAgICDAEKAQQBCgEIAQQBDAEKAQwBDAEEAQoBCAEIAQwCDgIIARADCAEGAgQBCAIGAQoBBgEQAgQBDgIGAgQBCgEMAQoBEAEEAgQBGgkqAwIBAgECAQIBAgECAQgCehpQR0RpYWxlY3QuX2dldF9jb2x1bW5faW5mb2MEAAAAAAAAAAwAAAAHAAAASwAAAHOkAAAAfABqAHwBfAJ8A3wEoAFkAaEBZAKNBH0FfABqAmQDawByNGQEfACgA2QFZAahAhYAfQZuBGQHfQZ0BKAFfAahAWoGdAdqCGQIjQF9B3wBagl8B3wFZAmNAn0IZApkC4QAfAigCqEARACDAX0JZAx9CnQEoAV8CqEBagZ0B2oIZA2NAX0HfAFqCXwHfAVkCY0CfQh8CKALoQB9C3wJfAtkDpwCUwApD05ybgEAACkBcm4BAAApAnKNAQAA6QQAAABhcQEAAAogICAgICAgICAgICAgICAgU0VMRUNUIGEuYXR0bmFtZQogICAgICAgICAgICAgICAgRlJPTQogICAgICAgICAgICAgICAgICAgIHBnX2NsYXNzIHQKICAgICAgICAgICAgICAgICAgICBqb2luIHBnX2luZGV4IGl4IG9uIHQub2lkID0gaXguaW5kcmVsaWQKICAgICAgICAgICAgICAgICAgICBqb2luIHBnX2F0dHJpYnV0ZSBhCiAgICAgICAgICAgICAgICAgICAgICAgIG9uIHQub2lkPWEuYXR0cmVsaWQgQU5EICVzCiAgICAgICAgICAgICAgICAgV0hFUkUKICAgICAgICAgICAgICAgICAgdC5vaWQgPSA6dGFibGVfb2lkIGFuZCBpeC5pbmRpc3ByaW1hcnkgPSAndCcKICAgICAgICAgICAgICAgIE9SREVSIEJZIGEuYXR0bnVtCiAgICAgICAgICAgIHoIYS5hdHRudW16CWl4LmluZGtleWG1AQAACiAgICAgICAgICAgICAgICBTRUxFQ1QgYS5hdHRuYW1lCiAgICAgICAgICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBhIEpPSU4gKAogICAgICAgICAgICAgICAgICAgIFNFTEVDVCB1bm5lc3QoaXguaW5ka2V5KSBhdHRudW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX3N1YnNjcmlwdHMoaXguaW5ka2V5LCAxKSBvcmQKICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX2luZGV4IGl4CiAgICAgICAgICAgICAgICAgICAgV0hFUkUgaXguaW5kcmVsaWQgPSA6dGFibGVfb2lkIEFORCBpeC5pbmRpc3ByaW1hcnkKICAgICAgICAgICAgICAgICAgICApIGsgT04gYS5hdHRudW09ay5hdHRudW0KICAgICAgICAgICAg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F4QAfBVEAIMBgwF8GGQjPAB8FnKsfBZkJGsDcqx8FnwYZCU8AHGsVwBnAH0deMB8CaAToQBEAF20XAJ9HokAfB6IAGQgGQCHAGYBZCZkF4QIiABkGBkARACDAWQnnAN9H2QhiABrBpACcnSIAGQhGQB8H2QhPABkH4gAawaQAnKgdBKHAGYBZChkKYQIiABkHxkAoBOhAEQAgwGDAXwfZCo8AGQjiABrBpACcr6IAGQjGQB8H6AUZCtpAKECZCw8AGQliABrBpACctyIAGQlGQB8H6AUZCtpAKECZC08AHwdoBV8H6EBAQCQAnE0VwB8HVMAKS5Ocm4BAAApAXJuAQAAKQJyjQEAAOkFAAAAYYoDAAAKICAgICAgICAgICAgICBTRUxFQ1QKICAgICAgICAgICAgICAgICAgaS5yZWxuYW1lIGFzIHJlbG5hbWUsCiAgICAgICAgICAgICAgICAgIGl4LmluZGlzdW5pcXVlLCBpeC5pbmRleHBycywgaXguaW5kcHJlZCwKICAgICAgICAgICAgICAgICAgYS5hdHRuYW1lLCBhLmF0dG51bSwgTlVMTCwgaXguaW5ka2V5JXMsCiAgICAgICAgICAgICAgICAgICVzLCAlcywgYW0uYW1uYW1lCiAgICAgICAgICAgICAgRlJPTQogICAgICAgICAgICAgICAgICBwZ19jbGFzcyB0CiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4gcGdfaW5kZXggaXggb24gdC5vaWQgPSBpeC5pbmRyZWxpZAogICAgICAgICAgICAgICAgICAgICAgICBqb2luIHBnX2NsYXNzIGkgb24gaS5vaWQgPSBpeC5pbmRleHJlbGlkCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgb3V0ZXIgam9pbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfYXR0cmlidXRlIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHQub2lkID0gYS5hdHRyZWxpZCBhbmQgJXMKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCBvdXRlciBqb2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19hbSBhbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gaS5yZWxhbSA9IGFtLm9pZAogICAgICAgICAgICAgIFdIRVJFCiAgICAgICAgICAgICAgICAgIHQucmVsa2luZCBJTiAoJ3InLCAndicsICdmJywgJ20nKQogICAgICAgICAgICAgICAgICBhbmQgdC5vaWQgPSA6dGFibGVfb2lkCiAgICAgICAgICAgICAgICAgIGFuZCBpeC5pbmRpc3ByaW1hcnkgPSAnZicKICAgICAgICAgICAgICBPUkRFUiBCWQogICAgICAgICAgICAgICAgICB0LnJlbG5hbWUsCiAgICAgICAgICAgICAgICAgIGkucmVsbmFtZQogICAgICAgICAgICApAnKNAQAAcgMAAAB6CTo6dmFyY2hhcnLHAAAAehVpeC5pbmRvcHRpb246OnZhcmNoYXLaBE5VTEwpAnKNAQAAcu4AAAB6DGkucmVsb3B0aW9uc3oIYS5hdHRudW16CWl4LmluZGtleWHeBAAACiAgICAgICAgICAgICAgU0VMRUNUCiAgICAgICAgICAgICAgICAgIGkucmVsbmFtZSBhcyByZWxuYW1lLAogICAgICAgICAgICAgICAgICBpeC5pbmRpc3VuaXF1ZSwgaXguaW5kZXhwcnMsIGl4LmluZHByZWQsCiAgICAgICAgICAgICAgICAgIGEuYXR0bmFtZSwgYS5hdHRudW0sIGMuY29ucmVsaWQsIGl4LmluZGtleTo6dmFyY2hhciwKICAgICAgICAgICAgICAgICAgaXguaW5kb3B0aW9uOjp2YXJjaGFyLCBpLnJlbG9wdGlvbnMsIGFtLmFtbmFtZQogICAgICAgICAgICAgIEZST00KICAgICAgICAgICAgICAgICAgcGdfY2xhc3MgdAogICAgICAgICAgICAgICAgICAgICAgICBqb2luIHBnX2luZGV4IGl4IG9uIHQub2lkID0gaXguaW5kcmVsaWQKICAgICAgICAgICAgICAgICAgICAgICAgam9pbiBwZ19jbGFzcyBpIG9uIGkub2lkID0gaXguaW5kZXhyZWxpZAogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IG91dGVyIGpvaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2F0dHJpYnV0ZSBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0Lm9pZCA9IGEuYXR0cmVsaWQgYW5kIGEuYXR0bnVtID0gQU5ZKGl4LmluZGtleSkKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCBvdXRlciBqb2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19jb25zdHJhaW50IGMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIChpeC5pbmRyZWxpZCA9IGMuY29ucmVsaWQgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXguaW5kZXhyZWxpZCA9IGMuY29uaW5kaWQgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5jb250eXBlIGluICgncCcsICd1JywgJ3gnKSkKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCBvdXRlciBqb2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19hbSBhbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gaS5yZWxhbSA9IGFtLm9pZAogICAgICAgICAgICAgIFdIRVJFCiAgICAgICAgICAgICAgICAgIHQucmVsa2luZCBJTiAoJ3InLCAndicsICdmJywgJ20nLCAncCcpCiAgICAgICAgICAgICAgICAgIGFuZCB0Lm9pZCA9IDp0YWJsZV9vaWQKICAgICAgICAgICAgICAgICAgYW5kIGl4LmluZGlzcHJpbWFyeSA9ICdmJwogICAgICAgICAgICAgIE9SREVSIEJZCiAgICAgICAgICAgICAgICAgIHQucmVsbmFtZSwKICAgICAgICAgICAgICAgICAgaS5yZWxuYW1lCiAgICAgICAgICAgICkCcsIBAAByzQEAACkBcr8BAABjAAAAAAAAAAAAAAAAAgAAAFMAAABzCAAAAHQAdAGDAVMAKQFOKQJyAgAAAHL8AAAAclsAAAByWwAAAHJbAAAAclwAAADaCDxsYW1iZGE+vwwAAPMAAAAAeidQR0RpYWxlY3QuZ2V0X2luZGV4ZXMuPGxvY2Fscz4uPGxhbWJkYT56O1NraXBwZWQgdW5zdXBw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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 14
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
array.cpython-37.pyc
10.57 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
base.cpython-37.pyc
101.60 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
dml.cpython-37.pyc
6.44 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ext.cpython-37.pyc
6.62 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
hstore.cpython-37.pyc
12.30 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
json.cpython-37.pyc
9.89 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pg8000.cpython-37.pyc
10.39 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
psycopg2.cpython-37.pyc
26.43 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
psycopg2cffi.cpython-37.pyc
1.69 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pygresql.cpython-37.pyc
7.80 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pypostgresql.cpython-37.pyc
3.25 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ranges.cpython-37.pyc
5.72 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
zxjdbc.cpython-37.pyc
1.88 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
2.06 KB
lrw-r--r--
2023-11-14 14:32:36
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).