REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 198.32 KB
Close
/opt/alt/python37/lib/python3.7/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-37.pyc
Text
Base64
Qg0NCgAAAACRllJleIoDAOMAAAAAAAAAAAAAAABpAAAAQAAAAHPYCwAAZABaAGQBWgFkAloCZANaA2QEZAVsBFoEZARkBmwFbQZaBwEAZARkBWwIWghkBGQFbAlaCWQEZAVsCloKZARkBWwLWgtkBGQFbAxaDGQEZAVsDVoNZARkBWwOWg5kBGQFbA9aD2QEZAVsEFoQZARkB2wRbRFaEQEAeRBkBGQIbBJtE1oTAQBXAG4gBABlFGsKcqgBAAEAAQBkBGQIbBVtE1oTAQBZAG4CWAB5HGQEZAlsFm0XWhcBAGQEZApsFm0YWhgBAFcAbiwEAGUUawpy8gEAAQABAGQEZAlsDW0XWhcBAGQEZApsDW0YWhgBAFkAbgJYAHkQZARkC2wNbRlaGgEAVwBuQgQAZRRrCpABckYBAAEAAQB5EGQEZAtsG20ZWhoBAFcAbhoEAGUUawqQAXJAAQABAAEAZAVaGlkAbgJYAFkAbgJYAGQMZA1kDmQPZBBkEWQSZBNkFGQVZBZkF2QYZBlkGmQbZBxkHWQeZB9kIGQhZCJkI2QkZCVkJmQnZChkKWQqZCtkLGQtZC5kL2QwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZDpkO2Q8ZD1kPmQ/ZEBkQWRCZENkRGRFZEZkR2RIZElkSmRLZExkTWROZE9kUGRRZFJkU2RUZFVkVmRXZFhkWWRaZFtkXGRdZF5kX2RgZGFkYmRjZGRkZWRmZGdkaGRpZGpka2RsZG1kbmRvZHBkcWRyZHNkdGdpWhxlHWUJah6DAWQFZHWFAhkAWh9lH2QEGQBkdWsCWiBlIJACcnBlCWohWiJlI1okZSVaJmUjWidlKGUpZSplK2UsZR1lLWUuZS9lMGUxZwtaMm5iZQlqM1oiZTRaNWR2ZHeEAFonZwBaMmQEZAVsNlo2eEJkeKA3oQBEAF02Wjh5FGUyoDllOmU2ZTiDAqEBAQBXAG4aBABlO2sKkAJyygEAAQABAJACd5hZAG4CWACQAnGYVwBlPGR5ZHqEAGU1ZHuDAUQAgwGDAVo9ZHxkfYQAWj5HAGR+ZH+EAGR/ZT+DA1pAZQRqQWUEakIXAFpDZIBaRGVEZIEXAFpFZUNlRBcAWkZlJWSCgwFaR2SDoEhkhGR6hABlBGpJRACDAaEBWkpHAGSFZCOEAGQjZUuDA1pMRwBkhmQlhABkJWVM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Y3RseSBpbiBQeXRob24uCgpIZXJlIGlzIGEgcHJvZ3JhbSB0byBwYXJzZSAiSGVsbG8sIFdvcmxkISIgKG9yIGFueSBncmVldGluZyBvZiB0aGUgZm9ybSAKQ3siPHNhbHV0YXRpb24+LCA8YWRkcmVzc2VlPiEifSksIGJ1aWx0IHVwIHVzaW5nIEx7V29yZH0sIEx7TGl0ZXJhbH0sIGFuZCBMe0FuZH0gZWxlbWVudHMgCihMeycrJzxQYXJzZXJFbGVtZW50Ll9fYWRkX18+fSBvcGVyYXRvciBnaXZlcyBMe0FuZH0gZXhwcmVzc2lvbnMsIHN0cmluZ3MgYXJlIGF1dG8tY29udmVydGVkIHRvCkx7TGl0ZXJhbH0gZXhwcmVzc2lvbnMpOjoKCiAgICBmcm9tIHB5cGFyc2luZyBpbXBvcnQgV29yZCwgYWxwaGFzCgogICAgIyBkZWZpbmUgZ3JhbW1hciBvZiBhIGdyZWV0aW5nCiAgICBncmVldCA9IFdvcmQoYWxwaGFzKSArICIsIiArIFdvcmQoYWxwaGFzKSArICIhIgoKICAgIGhlbGxvID0gIkhlbGxvLCBXb3JsZCEiCiAgICBwcmludCAoaGVsbG8sICItPiIsIGdyZWV0LnBhcnNlU3RyaW5nKGhlbGxvKSkKClRoZSBwcm9ncmFtIG91dHB1dHMgdGhlIGZvbGxvd2luZzo6CgogICAgSGVsbG8sIFdvcmxkISAtPiBbJ0hlbGxvJywgJywnLCAnV29ybGQnLCAnISddCgpUaGUgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBncmFtbWFyIGlzIHF1aXRlIHJlYWRhYmxlLCBvd2luZyB0byB0aGUgc2VsZi1leHBsYW5hdG9yeQpjbGFzcyBuYW1lcywgYW5kIHRoZSB1c2Ugb2YgJysnLCAnfCcgYW5kICdeJyBvcGVyYXRvcnMuCgpUaGUgTHtQYXJzZVJlc3VsdHN9IG9iamVjdCByZXR1cm5lZCBmcm9tIEx7UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZzxQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPn0gY2FuIGJlIGFjY2Vzc2VkIGFzIGEgbmVzdGVkIGxpc3QsIGEgZGljdGlvbmFyeSwgb3IgYW4Kb2JqZWN0IHdpdGggbmFtZWQgYXR0cmlidXRlcy4KClRoZSBweXBhcnNpbmcgbW9kdWxlIGhhbmRsZXMgc29tZSBvZiB0aGUgcHJvYmxlbXMgdGhhdCBhcmUgdHlwaWNhbGx5IHZleGluZyB3aGVuIHdyaXRpbmcgdGV4dCBwYXJzZXJzOgogLSBleHRyYSBvciBtaXNzaW5nIHdoaXRlc3BhY2UgKHRoZSBhYm92ZSBwcm9ncmFtIHdpbGwgYWxzbyBoYW5kbGUgIkhlbGxvLFdvcmxkISIsICJIZWxsbyAgLCAgV29ybGQgICEiLCBldGMuKQogLSBxdW90ZWQgc3RyaW5ncwogLSBlbWJlZGRlZCBjb21tZW50cwoKCkdldHRpbmcgU3RhcnRlZCAtCi0tLS0tLS0tLS0tLS0tLS0tClZpc2l0IHRoZSBjbGFzc2VzIEx7UGFyc2VyRWxlbWVudH0gYW5kIEx7UGFyc2VSZXN1bHRzfSB0byBzZWUgdGhlIGJhc2UgY2xhc3NlcyB0aGF0IG1vc3Qgb3RoZXIgcHlwYXJzaW5nCmNsYXNzZXMgaW5oZXJpdCBmcm9tLiBVc2UgdGhlIGRvY3N0cmluZ3MgZm9yIGV4YW1wbGVzIG9mIGhvdyB0bzoKIC0gY29uc3RydWN0IGxpdGVyYWwgbWF0Y2ggZXhwcmVzc2lvbnMgZnJvbSBMe0xpdGVyYWx9IGFuZCBMe0Nhc2VsZXNzTGl0ZXJhbH0gY2xhc3NlcwogLSBjb25zdHJ1Y3QgY2hhcmFjdGVyIHdvcmQtZ3JvdXAgZXhwcmVzc2lvbnMgdXNpbmcgdGhlIEx7V29yZH0gY2xhc3MKIC0gc2VlIGhvdyB0byBjcmVhdGUgcmVwZXRpdGl2ZSBleHByZXNzaW9ucyB1c2luZyBMe1plcm9Pck1vcmV9IGFuZCBMe09uZU9yTW9yZX0gY2xhc3NlcwogLSB1c2UgTHsnKyc8QW5kPn0sIEx7J3wnPE1hdGNoRmlyc3Q+fSwgTHsnXic8T3I+fSwgYW5kIEx7JyYnPEVhY2g+fSBvcGVyYXRvcnMgdG8gY29tYmluZSBzaW1wbGUgZXhwcmVzc2lvbnMgaW50byBtb3JlIGNvbXBsZXggb25lcwogLSBhc3NvY2lhdGUgbmFtZXMgd2l0aCB5b3VyIHBhcnNlZCByZXN1bHRzIHVzaW5nIEx7UGFyc2VyRWxlbWVudC5zZXRSZXN1bHRzTmFtZX0KIC0gZmluZCBzb21lIGhlbHBmdWwgZXhwcmVzc2lvbiBzaG9ydC1jdXRzIGxpa2UgTHtkZWxpbWl0ZWRMaXN0fSBhbmQgTHtvbmVPZn0KIC0gZmluZCBtb3JlIHVzZWZ1bCBjb21tb24gZXhwcmVzc2lvbnMgaW4gdGhlIEx7cHlwYXJzaW5nX2NvbW1vbn0gbmFtZXNwYWNlIGNsYXNzCnoFMi4yLjF6FTE4IFNlcCAyMDE4IDAwOjQ5IFVUQ3oqUGF1bCBNY0d1aXJlIDxwdG1jZ0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+6QAAAABOKQHaA3JlZikB2ghkYXRldGltZSkB2gVSTG9jaykB2ghJdGVyYWJsZSkB2g5NdXRhYmxlTWFwcGluZykB2gtPcmRlcmVkRGljdNoDQW5k2g9DYXNlbGVzc0tleXdvcmTaD0Nhc2VsZXNzTGl0ZXJhbNoKQ2hhcnNOb3RJbtoHQ29tYmluZdoERGljdNoERWFjaNoFRW1wdHnaCkZvbGxvd2VkQnnaB0ZvcndhcmTaCkdvVG9Db2x1bW7aBUdyb3Vw2gdLZXl3b3Jk2gdMaW5lRW5k2glMaW5lU3RhcnTaB0xpdGVyYWzaCk1hdGNoRmlyc3TaB05vTWF0Y2jaBk5vdEFuedoJT25lT3JNb3Jl2ghPbmx5T25jZdoIT3B0aW9uYWzaAk9y2hJQYXJzZUJhc2VFeGNlcHRpb27aE1BhcnNlRWxlbWVudEVuaGFuY2XaDlBhcnNlRXhjZXB0aW9u2g9QYXJzZUV4cHJlc3Npb27aE1BhcnNlRmF0YWxFeGNlcHRpb27aDFBhcnNlUmVzdWx0c9oUUGFyc2VTeW50YXhFeGNlcHRpb27aDVBhcnNlckVsZW1lbnTaDFF1b3RlZFN0cmluZ9oZUmVjdXJzaXZlR3JhbW1hckV4Y2VwdGlvbtoFUmVnZXjaBlNraXBUb9oJU3RyaW5nRW5k2gtTdHJpbmdTdGFydNoIU3VwcHJlc3PaBVRva2Vu2g5Ub2tlbkNvbnZlcnRlctoFV2hpdGXaBFdvcmTaB1dvcmRFbmTaCVdvcmRTdGFydNoKWmVyb09yTW9yZdoJYWxwaGFudW1z2gZhbHBoYXPaCmFscGhhczhiaXTaC2FueUNsb3NlVGFn2gphbnlPcGVuVGFn2g1jU3R5bGVDb21tZW502gNjb2zaEmNvbW1hU2VwYXJhdGVkTGlzdNoQY29tbW9uSFRNTEVudGl0edoMY291bnRlZEFycmF52g9jcHBTdHlsZUNvbW1lbnTaD2RibFF1b3RlZFN0cmluZ9oPZGJsU2xhc2hDb21tZW502g1kZWxpbWl0ZWRMaXN02gZkaWN0T2baDmRvd25jYXNlVG9rZW5z2gVlbXB0edoHaGV4bnVtc9oLaHRtbENvbW1lbnTaEGphdmFTdHlsZUNvbW1lbnTaBGxpbmXaB2xpbmVFbmTaCWxpbmVTdGFydNoGbGluZW5v2gxtYWtlSFRNTFRhZ3PaC21ha2VYTUxUYWdz2g5tYXRjaE9ubHlBdENvbNoRbWF0Y2hQcmV2aW91c0V4cHLaFG1hdGNoUHJldmlvdXNMaXRlcmFs2gpuZXN0ZWRFeHBy2g9udWxsRGVidWdBY3Rpb27aBG51bXPaBW9uZU9m2gdvcEFzc29j2hJvcGVyYXRvclByZWNlZGVuY2XaCnByaW50YWJsZXPaCHB1bmM4Yml02hJweXRob25TdHlsZUNvbW1lbnTaDHF1b3RlZFN0cmluZ9oMcmVtb3ZlUXVvdGVz2hFyZXBsYWNlSFRNTEVudGl0edoLcmVwbGFjZVdpdGjaCnJlc3RPZkxpbmXaD3NnbFF1b3RlZFN0cmluZ9oGc3Jhbmdl2glzdHJpbmdFbmTaC3N0cmluZ1N0YXJ02hB0cmFjZVBhcnNlQWN0aW9u2g11bmljb2RlU3RyaW5n2gx1cGNhc2VUb2tlbnPaDXdpdGhBdHRyaWJ1dGXaDWluZGVudGVkQmxvY2vaD29yaWdpbmFsVGV4dEZvctoHdW5ncm91cNoNaW5maXhOb3RhdGlvbtoLbG9jYXRlZEV4cHLaCXdpdGhDbGFzc9oKQ2xvc2VNYXRjaNoIdG9rZW5NYXDaEHB5cGFyc2luZ19jb21tb27pAwAAAGMBAAAAAAAAAAMAAAAIAAAAQwAAAHNgAAAAdAB8AHQBgwJyDnwAUwB5CHQCfACDAVMABAB0A2sKcloBAAEAAQB0AXwAgwGgBHQFoAahAGQBoQJ9AXQHZAKDAX0CfAKgCGQDZASEAKEBAQB8AqAJfAGhAVMAWABkBVMAKQZhFQEAAERyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHN0cihvYmopIHRoYXQgdHJpZXMgdG8gYmUgVW5pY29kZSBmcmllbmRseS4gSXQgZmlyc3QgdHJpZXMKICAgICAgICAgICBzdHIob2JqKS4gSWYgdGhhdCBmYWlscyB3aXRoIGEgVW5pY29kZUVuY29kZUVycm9yLCB0aGVuIGl0IHRyaWVzIHVuaWNvZGUob2JqKS4gSXQKICAgICAgICAgICB0aGVuIDwgcmV0dXJucyB0aGUgdW5pY29kZSBvYmplY3QgfCBlbmNvZGVzIGl0IHdpdGggdGhlIGRlZmF1bHQgZW5jb2RpbmcgfCAuLi4gPi4KICAgICAgICDaEXhtbGNoYXJyZWZyZXBsYWNlegYmI1xkKztjAQAAAAAAAAABAAAABgAAAFMAAABzJAAAAGQBdAB0AXwAZAIZAGQDZASFAhkAgwGDAWQDZACFAhkAFwBTACkFTnoCXHVyAQAAAOkCAAAA6f////8pAtoDaGV42gNpbnQpAdoBdKkAcngAAAD6ki9idWlsZGRpci9idWlsZC9CVUlMRFJPT1QvYWx0LXB5dGhvbjM3LXNldHVwdG9vbHMtNTguMy4wLTQuZWw4Lng4Nl82NC9vcHQvYWx0L3B5dGhvbjM3L2xpYi9weXRob24zLjcvc2l0ZS1wYWNrYWdlcy9zZXR1cHRvb2xzL192ZW5kb3IvcHlwYXJzaW5nLnB52gg8bGFtYmRhPqsAAADzAAAAAHoXX3VzdHIuPGxvY2Fscz4uPGxhbWJkYT5OKQraCmlzaW5zdGFuY2XaB3VuaWNvZGXaA3N0ctoSVW5pY29kZUVuY29kZUVycm9y2gZlbmNvZGXaA3N5c9oSZ2V0ZGVmYXVsdGVuY29kaW5ncikAAADaDnNldFBhcnNlQWN0aW9u2g90cmFuc2Zvcm1TdHJpbmcpA9oDb2Jq2gNyZXRaCnhtbGNoYXJyZWZyeAAAAHJ4AAAAcnkAAADaBV91c3RymgAAAHMSAAAAAAUKAQQCAgMIAg4CFAEIAQ4BcocAAAB6NnN1bSBsZW4gc29ydGVkIHJldmVyc2VkIGxpc3QgdHVwbGUgc2V0IGFueSBhbGwgbWluIG1heGMBAAAAAAAAAAIAAAACAAAAYwAAAHMS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eGFtcGxlOjoKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIGRhdGVfc3RyID0gKGludGVnZXIuc2V0UmVzdWx0c05hbWUoInllYXIiKSArICcvJyAKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJtb250aCIpICsgJy8nIAogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoImRheSIpKQogICAgICAgICMgZXF1aXZhbGVudCBmb3JtOgogICAgICAgICMgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKCiAgICAgICAgIyBwYXJzZVN0cmluZyByZXR1cm5zIGEgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikKCiAgICAgICAgZGVmIHRlc3QocywgZm49cmVwcik6CiAgICAgICAgICAgIHByaW50KCIlcyAtPiAlcyIgJSAocywgZm4oZXZhbChzKSkpKQogICAgICAgIHRlc3QoImxpc3QocmVzdWx0KSIpCiAgICAgICAgdGVzdCgicmVzdWx0WzBdIikKICAgICAgICB0ZXN0KCJyZXN1bHRbJ21vbnRoJ10iKQogICAgICAgIHRlc3QoInJlc3VsdC5kYXkiKQogICAgICAgIHRlc3QoIidtb250aCcgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCInbWludXRlcycgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCJyZXN1bHQuZHVtcCgpIiwgc3RyKQogICAgcHJpbnRzOjoKICAgICAgICBsaXN0KHJlc3VsdCkgLT4gWycxOTk5JywgJy8nLCAnMTInLCAnLycsICczMSddCiAgICAgICAgcmVzdWx0WzBdIC0+ICcxOTk5JwogICAgICAgIHJlc3VsdFsnbW9udGgnXSAtPiAnMTInCiAgICAgICAgcmVzdWx0LmRheSAtPiAnMzEnCiAgICAgICAgJ21v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ZiByZW1vdmVfZmlyc3QodG9rZW5zKToKICAgICAgICAgICAgICAgIHRva2Vucy5wb3AoMCkKICAgICAgICAgICAgcHJpbnQoT25lT3JNb3JlKFdvcmQobnVtcykpLnBhcnNlU3RyaW5nKCIwIDEyMyAzMjEiKSkgIyAtPiBbJzAnLCAnMTIzJywgJzMyMSddCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShXb3JkKG51bXMpKS5hZGRQYXJzZUFjdGlvbihyZW1vdmVfZmlyc3QpLnBhcnNlU3RyaW5nKCIwIDEyMyAzMjEiKSkgIyAtPiBbJzEyMycsICczMjEnXQoKICAgICAgICAgICAgbGFiZWwgPSBXb3JkKGFscGhhcykKICAgICAgICAgICAgcGF0dCA9IGxhYmVsKCJMQUJFTCIpICsgT25lT3JNb3JlKFdvcmQobnVtcykpCiAgICAgICAgICAgIHByaW50KHBhdHQucGFyc2VTdHJpbmcoIkFBQiAxMjMgMzIxIikuZHVtcCgpKQoKICAgICAgICAgICAgIyBVc2UgcG9wKCkgaW4gYSBwYXJzZSBhY3Rpb24gdG8gcmVtb3ZlIG5hbWVkIHJlc3VsdCAobm90ZSB0aGF0IGNvcnJlc3BvbmRpbmcgdmFsdWUgaXMgbm90CiAgICAgICAgICAgICMgcmVtb3ZlZCBmcm9tIGxpc3QgZm9ybSBvZiByZXN1bHRzKQogICAgICAgICAgICBkZWYgcmVtb3ZlX0xBQkVMKHRva2Vucyk6CiAgICAgICAgICAgICAgICB0b2tlbnMucG9wKCJMQUJFTCIpCiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5zCiAgICAgICAgICAgIHBhdHQuYWRkUGFyc2VBY3Rpb24ocmVtb3ZlX0xBQkVMKQogICAgICAgICAgICBwcmludChwYXR0LnBhcnNlU3RyaW5nKCJBQUIgMTIzIDMyMSIpLmR1bXAoKSkKICAgICAgICBwcmludHM6OgogICAgICAgICAgICBbJ0FBQicsICcxMjMnLCAnMzIxJ10KICAgICAgICAgICAgLSBMQUJFTDogQUFCCgogICAgICAgICAgICBbJ0FBQicsICcxMjMnLCAnMzIxJ10KICAgICAgICBydAAAANoHZGVm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UmVnZXgociJcZFxkXGQtXGRcZC1cZFxkXGRcZCIpCiAgICAgICAgICAgIGhvdXNlX251bWJlcl9leHByID0gU3VwcHJlc3MoJyMnKSArIFdvcmQobnVtcywgYWxwaGFudW1zKQogICAgICAgICAgICB1c2VyX2RhdGEgPSAoR3JvdXAoaG91c2VfbnVtYmVyX2V4cHIpKCJob3VzZV9udW1iZXIiKSAKICAgICAgICAgICAgICAgICAgICAgICAgfCBHcm91cChzc25fZXhwcikoInNzbiIpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgR3JvdXAoaW50ZWdlcikoImFnZSIpKQogICAgICAgICAgICB1c2VyX2luZm8gPSBPbmVPck1vcmUodXNlcl9kYXRhKQogICAgICAgICAgICAKICAgICAgICAgICAgcmVzdWx0ID0gdXNlcl9pbmZvLnBhcnNlU3RyaW5nKCIyMiAxMTEtMjItMzMzMyAjMjIxQiIpCiAgICAgICAgICAgIGZvciBpdGVtIGluIHJlc3VsdDoKICAgICAgICAgICAgICAgIHByaW50KGl0ZW0uZ2V0TmFtZSgpLCAnOicsIGl0ZW1bMF0pCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgYWdlIDogMjIKICAgICAgICAgICAgc3NuIDogMTExLTIyLTMzMzMKICAgICAgICAgICAgaG91c2VfbnVtYmVyIDogMjIxQgogICAgICAgIE5yiwAAAHIBAAAAKQJyAQAAAHJ0AAAAKQly0QAAAHLSAAAA2hVfUGFyc2VSZXN1bHRzX19sb29rdXBy6AAAAHLaAAAA2gRuZXh0cvgAAAByAgEAAHIAAQAAKQJypwAAANoDcGFycngAAAByeAAAAHJ5AAAA2gdnZXROYW1lQgMAAHMYAAAAABYGAQYBBgEIAQQBCgIGAQwBDgEeARICehRQYXJzZVJlc3VsdHMuZ2V0TmFtZXIBAAAAYwQAAAAAAAAACwAAAA4AAABDAAAAc2IBAABnAH0EZAF9BXwEoAB8AXQBfACgAqEAgwEXAKEBAQB8A5ABclh8AKADoQBywHQEZAJkA4QAfACgBaEARACDAYMBfQZ4enwGRABdclwCfQd9CHwEcl58BKAAfAWhAQEAfASgAGQEfAFkBXwC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KCkKICAgICAgICAgICAgdGVybSA9IGlkZW50IHwgbnVtIHwgR3JvdXAoJygnICsgZnVuYyArICcpJykKICAgICAgICAgICAgZnVuYyA8PD0gaWRlbnQgKyBHcm91cChPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHRlcm0pKSkKICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5wYXJzZVN0cmluZygiZm5hIGEsYiwoZm5iIGMsZCwyMDApLDEwMCIpCiAgICAgICAgICAgIHJlc3VsdC5wcHJpbnQod2lkdGg9NDApCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgWydmbmEnLAogICAgICAgICAgICAgWydhJywKICAgICAgICAgICAgICAnYicsCiAgICAgICAgICAgICAgWycoJywgJ2ZuYicsIFsnYycsICdkJywgJzIwMCddLCAnKSddLAogICAgICAgICAgICAgICcxMDAnXV0KICAgICAgICBOKQLaBnBwcmludHLOAAAAKQNypwAAAHKmAAAAcgcBAAByeAAAAHJ4AAAAcnkAAAByRAEAAJQDAABzAgAAAAAVehNQYXJzZVJlc3VsdHMucHByaW50YwEAAAAAAAAAAQAAAAUAAABDAAAAcy4AAAB8AGoAfABqAaACoQB8AGoDZABrCXIefACgA6EAcCBkAHwAagR8AGoFZgRmAlMAKQFOKQZy1wAAAHLaAAAActwAAABy0gAAAHLTAAAActEAAAApAXKnAAAAcngAAAByeAAAAHJ5AAAA2gxfX2dldHN0YXRlX1+sAwAAcwoAAAAAAQQBCAEUAQQBehlQYXJzZVJlc3VsdHMuX19nZXRzdGF0ZV9fYwIAAAAAAAAABAAAAAUAAABDAAAAc04AAAB8AWQBGQB8AF8AfAFkAhkAXAR8AF8BfQJ9A3wAXwJpAHwAXwN8AGoDoAR8A6EBAQB8AmQAawlyRHQFfAKDAXwAXwZuBmQAfABfBmQAUwApA05yAQAAAHKLAAAAKQdy1wAAAHLaAAAActEAAABy0wAAAHIaAQAAcuQAAABy0gAAACkEcqcAAADaBXN0YXRlcjsBAADaDGluQWNjdW1OYW1lc3J4AAAAcngAAAByeQAAANoMX19zZXRzdGF0ZV9fswMAAHMOAAAAAAEKBBQBBgEMAQgBDAJ6GVBhcnNlUmVzdWx0cy5fX3NldHN0YXRlX19jAQAAAAAAAAABAAAABAAAAEMAAABzFAAAAHwAagB8AGoBfABqAnwAagNmBFMAKQFOKQRy1wAAAHLRAAAActQAAABy1QAAACkBcqcAAAByeAAAAHJ4AAAAcnkAAADaDl9fZ2V0bmV3YXJnc19fwAMAAHMCAAAAAAF6G1BhcnNlUmVzdWx0cy5fX2dldG5ld2FyZ3NfX2MBAAAAAAAAAAEAAAAEAAAAQwAAAHMYAAAAdAB0AXwAgwGDAXQCfACgA6EAgwEXAFMAKQFOKQRyugAAAHK7AAAActYAAAByAAEAACkBcqcAAAByeAAAAHJ4AAAAcnkAAAByvAAAAMMDAABzAgAAAAABehRQYXJzZVJlc3VsdHMuX19kaXJfXykETk5UVCkBTikBcp4AAAApBE5Gcp4AAABUKQNyngAAAHIBAAAAVCk0cpkAAABymgAAAHKbAAAAcr0AAAByygAAAHJ8AAAAcqkAAAByxgAAAHLnAAAAcvQAAABy9QAAAHL2AAAAcvcAAADaC19fbm9uemVyb19fcvkAAABy+gAAAHL9AAAAcv4AAABy/wAAAHInAQAAcgABAAByAgEAAHLsAAAAcvsAAAByAQEAAHIDAQAAcgUBAAByCgEAAHLjAAAAcg0BAAByDwEAAHIRAQAAchMBAABysAAAAHIVAQAAch0BAAByHgEAAHKyAAAAcrEAAAByIQEAAHLOAAAAciYBAABy3AAAAHItAQAAcjkBAAByPAEAAHI/AQAAckQBAAByRQEAAHJIAQAAckkBAAByvAAAAHJ4AAAAcngAAAByeAAAAHJ5AAAAciQAAABEAQAAc2gAAAAIJgQBCgkUJwgJDA0IFQgDCAEIAQQBCAEIAQgGCAMIAwQBBAMEAwQBAgMEAwQDBAMIBAgECAQIBQg0ChYIFAgOCBIIBwgOCAUIEAgICAMIAwoLCBAIIwgLCj0IBwglCi0IGAgHCA0IA2MCAAAAAAAAAAMAAAAGAAAAQwAAAHNGAAAAfAF9AmQBfAAEAAMAawByHHQAfAKDAWsAcjRuBAEAbhR8AnwAZAIYABkAZANrAnI0ZAJTAHwAfAKgAWQDZAF8AKEDGABTACkEYQQCAABSZXR1cm5zIGN1cnJlbnQgY29sdW1uIHdpdGhpbiBhIHN0cmluZywgY291bnRpbmcgbmV3bGluZXMgYXMgbGluZSBzZXBhcmF0b3JzLgogICBUaGUgZmlyc3QgY29sdW1uIGlzIG51bWJlciAxLgoKICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2luZyBiZWhhdmlvciBpcyB0byBleHBhbmQgdGFicyBpbiB0aGUgaW5wdXQgc3RyaW5nCiAgIGJlZm9yZSBzdGFydGluZyB0aGUgcGFyc2luZyBwcm9jZXNzLiAgU2VlIEx7SXtQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nfTxQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPn0gZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgb24gcGFyc2luZyBzdHJpbmdzIGNvbnRhaW5pbmcgQ3s8VEFCPn1zLCBhbmQgc3VnZ2VzdGVkIG1ldGhvZHMgdG8gbWFpbnRhaW4gYQogICBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHBhcnNlZCBzdHJpbmcsIHRoZSBwYXJzZSBsb2NhdGlvbiwgYW5kIGxpbmUgYW5kIGNvbHVtbgogICBwb3NpdGlvbnMgd2l0aGluIHRoZSBwYXJzZWQgc3RyaW5nLgogICByAQAAAHKLAAAAcikBAAApAnLoAAAA2gVyZmluZCkDcqIAAADaBHN0cmdyjgAAAHJ4AAAAcngAAAByeQAAAHI7AAAAyAMAAHMEAAAAAAoEAWMCAAAAAAAAAAIAAAAFAAAAQwAAAHMSAAAAfAGgAGQBZAJ8AKEDZAMXAFMAKQRhBwIAAFJldHVybnMgY3VycmVudCBsaW5lIG51bWJlciB3aXRoaW4gYSBzdHJpbmcsIGNvdW50aW5nIG5ld2xpbmVzIGFzIGxpbmUgc2VwYXJhdG9ycy4KICAgVGhlIGZpcnN0IGxpbmUgaXMgbnVtYmVyIDEuCgogICBOb3RlOiB0aGUgZGVmYXVsdCBwYXJzaW5nIGJlaGF2aW9yIGlzIHRvIGV4cGFuZCB0YWJzIGluIHRoZSBpbnB1dCBzdHJpbmcKICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUgTHtJe1BhcnNlckVsZW1lbnQucGFyc2VTdHJpbmd9PFBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmc+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CUV4Y2VwdGlvbnJ+AAAAKQdyXAEAAHJrAQAAcmMBAADaCUxJTkVfRElGRtoJdGhpc19saW5lcm0BAADaCWZ1bmNfbmFtZXJ4AAAAKQZyZQEAAHJqAQAAclwBAAByYAEAAHJrAQAAcmwBAAByeQAAANoLX3RyaW1fYXJpdHkPBAAAcyoAAAAAAQgBDAEGAQYDEAEKBQwFBgEGBQQDDgEUAhYYBAECAQYBEgEOAQ4BBgJydQEAAGMAAAAAAAAAAAAAAAAFAAAAAAAAAHOSAgAAZQBaAWQAWgJkAVoDZAJaBGQDWgVlBmQEZAWEAIMBWgdlBmQGZAeEAIMBWghkhmQIZAmEAVoJZApkC4QAWgpkDGQNhABaC2SHZA5kD4QBWgxkiGQRZBKEAVoNZBNkFIQAWg5kFWQWhABaD2QXZBiEAFoQZBlkGoQAWhFkG2QchABaEmQdZB6EAFoTZIlkH2QghAFaFGQhZCKEAFoVZIpkI2QkhAFaFmQlZCaEAFoXZCdkKIQAWhhHAGQpZCqEAGQqZRmDA1oaZRtkK2sJcuBHAGQsZC2EAGQtZRmDA1ocbhBHAGQuZC2EAGQtZRmDA1ocaQBaHWUegwBaH2QvZC9nAlogZItkMGQxhAFaIWUWWiJlBmQyZDOEAIMBWiNkA1okZQZkjGQ1ZDaEAYMBWiVkjWQ3ZDiEAVomZSdkA2YCZDlkOoQBWihkO2Q8hABaKWUnZgFkPWQ+hAFaKmUnZANmAmQ/ZECEAVorZEFkQoQAWixkQ2REhABaLWRFZEaEAFouZEdkSIQAWi9kSWRKhABaMGRLZEyEAFoxZE1kToQAWjJkT2RQhABaM2RRZFKEAFo0ZFNkVIQAWjVkVWRWhABaNmRXZFiEAFo3ZFlkWoQAWjhkjmRbZFyEAVo5ZF1kXoQAWjpkX2RghABaO2RhZGKEAFo8ZGNkZIQAWj1kZWRmhABaPmRnZGiEAFo/ZI9kaWRqhAFaQGRrZGyEAFpBZG1kboQAWkJkb2RwhABaQ2RxZHKEAFpEZwBmAWRzZHSEAVpFZJBkdWR2hAFaRocAZgFkd2R4hAhaR2R5ZHqEAFpIZHtkfIQAWklkfWR+hABaSmR/ZICEAFpLZJFkgWSChAFaTGSSZIRkhYQBWk2HAAQAWk5TACmTciYAAAB6KUFic3RyYWN0IGJhc2UgbGV2ZWwgcGFyc2Vy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Y3Rpb25zIHRvIHBlcmZvcm0gd2hlbiBzdWNjZXNzZnVsbHkgbWF0Y2hpbmcgcGFyc2UgZWxlbWVudCBkZWZpbml0aW9uLgogICAgICAgIFBhcnNlIGFjdGlvbiBmbiBpcyBhIGNhbGxhYmxlIG1ldGhvZCB3aXRoIDAtMyBhcmd1bWVudHMsIGNhbGxlZCBhcyBDe2ZuKHMsbG9jLHRva3MpfSwKICAgICAgICBDe2ZuKGxvYyx0b2tzKX0sIEN7Zm4odG9rcyl9LCBvciBqdXN0IEN7Zm4oKX0sIHdoZXJlOgogICAgICAgICAtIHMgICA9IHRoZSBvcmlnaW5hbCBzdHJpbmcgYmVpbmcgcGFyc2VkIChzZWUgbm90ZSBiZWxvdykKICAgICAgICAgLSBsb2MgPSB0aGUgbG9jYXRpb24gb2YgdGhlIG1hdGNoaW5nIHN1YnN0cmluZwogICAgICAgICAtIHRva3MgPSBhIGxpc3Qgb2YgdGhlIG1hdGNoZWQgdG9rZW5zLCBwYWNrYWdlZCBhcyBhIEN7THtQYXJzZVJlc3VsdHN9fSBvYmplY3QKICAgICAgICBJZiB0aGUgZnVuY3Rpb25zIGluIGZucyBtb2RpZnkgdGhlIHRva2VucywgdGhleSBjYW4gcmV0dXJuIHRoZW0gYXMgdGhlIHJldHVybgogICAgICAgIHZhbHVlIGZyb20gZm4sIGFuZCB0aGUgbW9kaWZpZWQgbGlzdCBvZiB0b2tlbnMgd2lsbCByZXBsYWNlIHRoZSBvcmlnaW5hbC4KICAgICAgICBPdGhlcndpc2UsIGZuIGRvZXMgbm90IG5lZWQgdG8gcmV0dXJuIGFueSB2YWx1ZS4KCiAgICAgICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHM6CiAgICAgICAgIC0gY2FsbER1cmluZ1RyeSA9IChkZWZhdWx0PUN7RmFsc2V9KSBpbmRpY2F0ZSBpZiBwYXJzZSBhY3Rpb24gc2hvdWxkIGJlIHJ1biBkdXJpbmcgbG9va2FoZWFkcyBhbmQgYWx0ZXJuYXRlIHRlc3RpbmcKCiAgICAgICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2luZyBiZWhhdmlvciBpcyB0byBleHBhbmQgdGFicyBpbiB0aGUgaW5wdXQgc3RyaW5nCiAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUgTHtJe3BhcnNlU3RyaW5nfTxwYXJzZVN0cmluZz59IGZvciBtb3JlIGluZm9ybWF0aW9uCiAgICAgICAgb24gcGFyc2luZyBzdHJpbmdzIGNvbnRhaW5pbmcgQ3s8VEFCPn1zLCBhbmQgc3VnZ2VzdGVkIG1ldGhvZHMgdG8gbWFpbnRhaW4gYQogICAgICAgIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgcGFyc2VkIHN0cmluZywgdGhlIHBhcnNlIGxvY2F0aW9uLCBhbmQgbGluZSBhbmQgY29sdW1uCiAgICAgICAgcG9zaXRpb25zIHdpdGhpbiB0aGUgcGFyc2VkIHN0cmluZy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyICsgJy8nICsgaW50ZWdlciArICcvJyArIGludGVnZXIKCiAgICAgICAgICAgIGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikgICMgLT4gWycxOTk5JywgJy8nLCAnMTInLCAnLycsICczMSddCgogICAgICAgICAgICAjIHVzZSBwYXJzZSBhY3Rpb24gdG8gY29udmVydCB0byBpbnRzIGF0IHBhcnNlIHRpbWUKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IGludCh0b2tzWzBdKSkKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyICsgJy8nICsgaW50ZWdlciArICcvJyArIGludGVnZXIKCiAgICAgICAgICAgICMgbm90ZSB0aGF0IGludGVnZXIgZmllbGRzIGFyZSBub3cgaW50cywgbm90IHN0cmluZ3MKICAgICAgICAgICAgZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKSAgIyAtPiBbMTk5OSwgJy8nLCAxMiwgJy8nLCAzMV0KICAgICAgICByjgEAAEYpBnLWAAAA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CiAgICAgICAgICAgIAogICAgICAgICAgIFRoaXMgc3BlZWR1cCBtYXkgYnJlYWsgZXhpc3RpbmcgcHJvZ3JhbXMgdGhhdCB1c2UgcGFyc2UgYWN0aW9ucyB0aGF0CiAgICAgICAgICAgaGF2ZSBzaWRlLWVmZmVjdHMuICBGb3IgdGhpcyByZWFzb24sIHBhY2tyYXQgcGFyc2luZyBpcyBkaXNhYmxlZCB3aGVuCiAgICAgICAgICAgeW91IGZpcnN0IGltcG9ydCBweXBhcnNpbmcuICBUbyBhY3RpdmF0ZSB0aGUgcGFja3JhdCBmZWF0dXJlLCB5b3VyCiAgICAgICAgICAgcHJvZ3JhbSBtdXN0IGNhbGwgdGhlIGNsYXNzIG1ldGhvZCBDe1BhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdCgpfS4gIElmCiAgICAgICAgICAgeW91ciBwcm9ncmFtIHVzZXMgQ3twc3ljb30gdG8gImNvbXBpbGUgYXMgeW91IGdvIiwgeW91IG11c3QgY2FsbAogICAgICAgICAgIEN7ZW5hYmxlUGFja3JhdH0gYmVmb3JlIGNhbGxpbmcgQ3twc3ljby5mdWxsKCl9LiAgSWYgeW91IGRvIG5vdCBkbyB0aGlzLAogICAgICAgICAgIFB5dGhvbiB3aWxsIGNyYXNoLiAgRm9yIGJlc3QgcmVzdWx0cywgY2FsbCBDe2VuYWJsZVBhY2tyYXQoKX0gaW1tZWRpYXRlbHkKICAgICAgICAgICBhZnRlciBpbXBvcnRpbmcgcHlwYXJzaW5nLgogICAgICAgICAgIAogICAgICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICAgICBpbXBvcnQgcHlwYXJzaW5nCiAgICAgICAgICAgICAgIHB5cGFyc2luZy5QYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXQoKQogICAgICAgIFROKQdyJgAAANoPX3BhY2tyYXRFbmFibGVkcsUBAAByzwEAAHLJAQAActQBAABynwEAACkB2hBjYWNoZV9zaXplX2xpbWl0cngAAAByeAAAAHJ5AAAA2g1lbmFibGVQYWNrcmF0JQYAAHMMAAAAABsGAQYBCAEMAgwBehtQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXRj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ICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBzb3VyY2UgPSAic2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3IgogICAgICAgICAgICBwcmludChzb3VyY2UpCiAgICAgICAgICAgIGZvciB0b2tlbnMsc3RhcnQsZW5kIGluIFdvcmQoYWxwaGFzKS5zY2FuU3RyaW5nKHNvdXJjZSk6CiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyAnXicqKGVuZC1zdGFydCkpCiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyB0b2tlbnNbMF0pCiAgICAgICAgCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAKICAgICAgICAgICAgc2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3CiAgICAgICAgICAgIF5eXl5eCiAgICAgICAgICAgIHNsZGpmCiAgICAgICAgICAgICAgICAgICAgXl5eXl5eXgogICAgICAgICAgICAgICAgICAgIGxzZGpqa2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZGtqZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGtqc2ZkCiAgICAgICAgcgEAAABGKQFymwEAAHKLAAAATikOcocBAABy2gEAAHKFAQAAcoQBAAByhwAAAHLbAQAAcugAAABysgEAAHKfAQAAciYAAABy1QEAAHIhAAAAch8AAABy3AEAACkPcqcAAAByUgEAANoKbWF4TWF0Y2hlc9oHb3ZlcmxhcHKtAQAAcrEBAAByogAAANoKcHJlcGFyc2VGbtoHcGFyc2VGbtoHbWF0Y2hlc3K3AQAA2gduZXh0TG9jcrkBAADaB25leHRsb2NyWQEAAHJ4AAAAcngAAAByeQAAANoKc2NhblN0cmluZ3oGAABzQgAAAAAeBgEIAQwBDAIGAQwBCAEEAQYBBgEIAQQBAgEWAQIBCgEWAQ4BDgIIAQgBDAEEAQoBCAEGAgoCBgIQARIBCAEEA3oYUGFyc2VyRWxlbWVudC5zY2FuU3RyaW5nYwIAAAAAAAAACAAAAAoAAABDAAAAc+IAAABnAH0CZAF9A2QCfABfAHmeeGh8AKABfAGhAUQAXVpcA30EfQV9BnwCoAJ8AXwDfAWFAhkAoQEBAHwEcnJ0A3wEdASDAnJUfAJ8BKAFoQA3AH0Cbh50A3wEdAaDAnJofAJ8BDcAfQJuCnwCoAJ8BKEBAQB8Bn0DcRxXAHwCoAJ8AXwDZAOFAhkAoQEBAGQEZAWEAHwCRACDAX0CZAagB3QIdAl0CnwCgwGDAqEBUwAEAHQLawpy3AEAfQcBAHoSdAxqDXLIggBuBHwHggFXAGQDZAN9B34HWABZAG4CWABkA1MAKQdhZgMAAAogICAgICAgIEV4dGVuc2lvbiB0byBDe0x7c2NhblN0cmluZ319LCB0byBtb2RpZnkgbWF0Y2hpbmcgdGV4dCB3aXRoIG1vZGlmaWVkIHRva2VucyB0aGF0IG1heQogICAgICAgIGJlIHJldHVybmVkIGZyb20gYSBwYXJzZSBhY3Rpb24uICBUbyB1c2UgQ3t0cmFuc2Zvcm1TdHJpbmd9LCBkZWZpbmUgYSBncmFtbWFyIGFuZAogICAgICAgIGF0dGFjaCBhIHBhcnNlIGFjdGlvbiB0byBpdCB0aGF0IG1vZGlmaWVzIHRoZSByZXR1cm5lZCB0b2tlbiBsaXN0LgogICAgICAgIEludm9raW5nIEN7dHJhbnNmb3JtU3RyaW5nKCl9IG9uIGEgdGFyZ2V0IHN0cmluZyB3aWxsIHRoZW4gc2NhbiBmb3IgbWF0Y2hlcywKICAgICAgICBhbmQgcmVwbGFjZSB0aGUgbWF0Y2hlZCB0ZXh0IHBhdHRlcm5zIGFjY29yZGluZyB0byB0aGUgbG9naWMgaW4gdGhlIHBhcnNlCiAgICAgICAgYWN0aW9uLiAgQ3t0cmFuc2Zvcm1TdHJpbmcoKX0gcmV0dXJucyB0aGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIHN0cmluZy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgd2QgPSBXb3JkKGFscGhhcykKICAgICAgICAgICAgd2Quc2V0UGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IHRva3NbMF0udGl0bGUoKSkKICAgICAgICAgICAgCiAgICAgICAgICAgIHByaW50KHdkLnRyYW5zZm9ybVN0cmluZygibm93IGlzIHRoZSB3aW50ZXIgb2Ygb3VyIGRpc2NvbnRlbnQgbWFkZSBnbG9yaW91cyBzdW1tZXIgYnkgdGhpcyBzdW4gb2YgeW9yay4iKSkKICAgICAgICBQcmludHM6OgogICAgICAgICAgICBOb3cgSXMgVGhlIFdpbnRlciBPZiBPdXIgRGlzY29udGVudCBNYWRlIEdsb3Jpb3VzIFN1bW1lciBCeSBUaGlzIFN1biBPZiBZb3JrLgogICAgICAgIHIBAAAAVE5jAQAAAAAAAAACAAAAAwAAAFMAAABzFAAAAGcAfABdDH0BfAFyBHwBkQJxBFMAcngAAAByeAAAACkCcogAAADaAW9yeAAAAHJ4AAAAcnkAAABy4QAAAOMGAABzAgAAAAYAejFQYXJzZXJFbGVtZW50LnRyYW5zZm9ybVN0cmluZy48bG9jYWxzPi48bGlzdGNvbXA+cp4AAAApDnKEAQAAcucBAAByDwEAAHJ8AAAAciQAAAByzgAAAHLWAAAAcrQAAAByogEAAHKHAAAA2ghfZmxhdHRlbnIfAAAAciYAAABy3AEAACkIcqcAAAByUgEAAHIjAQAA2gVsYXN0RXJ3AAAAco4AAAByrQEAAHJZAQAAcngAAAByeAAAAHJ5AAAAcoQAAADBBgAAcygAAAAAEQQBBAMGAQIBFgESAQQBCgEOAQoBCgIKAQgBEgEOARQBEAEGAQQDeh1QYXJzZXJFbGVtZW50LnRyYW5zZm9ybVN0cmluZ2MDAAAAAAAAAAQAAAAKAAAAQwAAAHNQAAAAeRp0AGQBZAKEAHwAoAF8AXwCoQJEAIMBgwFTAAQAdAJrCnJKAQB9AwEAehJ0A2oEcjaCAG4EfAOCAVcAZANkA30DfgNYAFkAbgJYAGQDUwApBGGtAwAACiAgICAgICAgQW5vdGhlciBleHRlbnNpb24gdG8gQ3tMe3NjYW5TdHJpbmd9fSwgc2ltcGxpZnlpbmcgdGhlIGFjY2VzcyB0byB0aGUgdG9rZW5zIGZvdW5kCiAgICAgICAgdG8gbWF0Y2ggdGhlIGdpdmVuIHBhcnNlIGV4cHJlc3Npb24uICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwKICAgICAgICBDe21heE1hdGNoZXN9IGFyZ3VtZW50LCB0byBjbGlwIHNlYXJjaGluZyBhZnRlciAnbicgbWF0Y2hlcyBhcmUgZm91bmQuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgICMgYSBjYXBpdGFsaXplZCB3b3JkIHN0YXJ0cyB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBsb3dlcmNhc2UgbGV0dGVycwogICAgICAgICAgICBjYXBfd29yZCA9IFdvcmQoYWxwaGFzLnVwcGVyKCksIGFscGhhcy5sb3dlcigpKQogICAgICAgICAgICAKICAgICAgICAgICAgcHJpbnQoY2FwX3dvcmQuc2VhcmNoU3RyaW5nKCJNb3JlIHRoYW4gSXJvbiwgbW9yZSB0aGFuIExlYWQsIG1vcmUgdGhhbiBHb2xkIEkgbmVlZCBFbGVjdHJpY2l0eSIpKQoKICAgICAgICAgICAgIyB0aGUgc3VtKCkgYnVpbHRpbiBjYW4gYmUgdXNlZCB0byBtZXJnZSByZXN1bHRzIGludG8gYSBzaW5nbGUgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgICAgICBwcmludChzdW0oY2FwX3dvcmQuc2VhcmNoU3RyaW5nKCJNb3JlIHRoYW4gSXJvbiwgbW9yZSB0aGFuIExlYWQsIG1vcmUgdGhhbiBHb2xkIEkgbmVlZCBFbGVjdHJpY2l0eSIpKSkKICAgICAgICBwcmludHM6OgogICAgICAgICAgICBbWydNb3JlJ10sIFsnSXJvbiddLCBbJ0xlYWQnXSwgWydHb2xkJ10sIFsnSSddLCBbJ0VsZWN0cmljaXR5J11dCiAgICAgICAgICAgIFsnTW9yZScsICdJcm9uJywgJ0xlYWQnLCAnR29sZCcsICdJJywgJ0VsZWN0cmljaXR5J10KICAgICAgICBjAQAAAAAAAAAEAAAABQAAAFMAAABzFgAAAGcAfABdDlwDfQF9An0DfAGRAnEEUwByeAAAAHJ4AAAAKQRyiAAAAHJ3AAAAco4AAAByrQEAAHJ4AAAAcngA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LCBzaW1pbGFyIHRvIEN7e21pbixtYXh9fSBtdWx0aXBsaWVycyBpbiByZWd1bGFyIGV4cHJlc3Npb25zLiAgVHVwbGVzCiAgICAgICAgbWF5IGFsc28gaW5jbHVkZSBDe05vbmV9IGFzIGluOgogICAgICAgICAtIEN7ZXhwcioobixOb25lKX0gb3IgQ3tleHByKihuLCl9IGlzIGVxdWl2YWxlbnQKICAgICAgICAgICAgICB0byBDe2V4cHIqbiArIEx7WmVyb09yTW9yZX0oZXhwcil9CiAgICAgICAgICAgICAgKHJlYWQgYXMgImF0IGxlYXN0IG4gaW5zdGFuY2VzIG9mIEN7ZXhwcn0iKQogICAgICAgICAtIEN7ZXhwciooTm9uZSxuKX0gaXMgZXF1aXZhbGVudCB0byBDe2V4cHIqKDAsbil9CiAgICAgICAgICAgICAgKHJlYWQgYXMgIjAgdG8gbiBpbnN0YW5jZXMgb2YgQ3tleHByfSIpCiAgICAgICAgIC0gQ3tleHByKihOb25lLE5vbmUpfSBpcyBlcXVpdmFsZW50IHRvIEN7THtaZXJvT3JNb3JlfShleHByKX0KICAgICAgICAgLSBDe2V4cHIqKDEsTm9uZSl9IGlzIGVxdWl2YWxlbnQgdG8gQ3tMe09uZU9yTW9yZX0oZXhwcil9CgogICAgICAgIE5vdGUgdGhhdCBDe2V4cHIqKE5vbmUsbil9IGRvZXMgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZgogICAgICAgIG1vcmUgdGhhbiBuIGV4cHJzIGV4aXN0IGluIHRoZSBpbnB1dCBzdHJlYW07IHRoYXQgaXMsCiAgICAgICAgQ3tleHByKihOb25lLG4pfSBkb2VzIG5vdCBlbmZvcmNlIGEgbWF4aW11bSBudW1iZXIgb2YgZXhwcgogICAgICAgIG9jY3VycmVuY2VzLiAgSWYgdGhpcyBiZWhhdmlvciBpcyBkZXNpcmVkLCB0aGVuIHdyaXRlCiAgICAgICAgQ3tleHByKihOb25lLG4pICsgfmV4cHJ9CiAgICAgICAgcgEAAAApAk5OTnJzAAAAcosAAAB6N2Nhbm5vdCBtdWx0aXBseSAnUGFyc2VyRWxlbWVudCcgYW5kICgnJXMnLCclcycpIG9iamVj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ICAgICAgIHdkID0gV29yZChhbHBoYXMpLnNldE5hbWUoImFscGhhd29yZCIpCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpLnNldE5hbWUoIm51bXdvcmQiKQogICAgICAgICAgICB0ZXJtID0gd2QgfCBpbnRlZ2VyCiAgICAgICAgICAgIAogICAgICAgICAgICAjIHR1cm4gb24gZGVidWdnaW5nIGZvciB3ZAogICAgICAgICAgICB3ZC5zZXREZWJ1ZygpCgogICAgICAgICAgICBPbmVPck1vcmUodGVybSkucGFyc2VTdHJpbmcoImFiYyAxMjMgeHl6IDg5MCIpCiAgICAgICAgCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAwKDEsMSkKICAgICAgICAgICAgTWF0Y2hlZCBhbHBoYXdvcmQgLT4gWydhYmMnXQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDMoMSw0KQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciA0KSwgKGxpbmU6MSwgY29sOjUpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgNygxLDgpCiAgICAgICAgICAgIE1hdGNoZWQgYWxwaGF3b3JkIC0+IFsneHl6J10KICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAxMSgxLDEyKQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciAxMiksIChsaW5lOjEsIGNvbDoxMykKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAxNSgxLDE2KQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciAxNSksIChsaW5lOjEsIGNvbDoxNikKCiAgICAgICAgVGhlIG91dHB1dCBzaG93biBpcyB0aGF0IHByb2R1Y2VkIGJ5IHRoZSBkZWZhdWx0IGRlYnVnIGFjdGlvbnMgLSBj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C6AKZAp0E3wNahJ8CoMCZAsYABQAZAwXAHwOFwChAQEAbhh8C6AKZAp8DWoSFABkDBcAfA4XAKEBAQB8C6AKZA10BHwNgwEXAKEBAQB8CZABb2B8Bn0JfA19DFcAZAJkAn0Nfg1YAFkAbkQEAHQUawqQAXK4AQB9DwEAeiR8C6AKZA50BHwPgwEXAKEBAQB8CZABb6J8Bn0JfA99DFcAZAJkAn0Pfg9YAFkAbgJYAHwFkAFy3nwEkAFy0HwLoApkCaEBAQB0FWQEoAt8C6EBgwEBAHwHoAp8CnwMZgKhAQEAcUhXAHwJfAdmAlMAKQ9hMwwAAAogICAgICAgIEV4ZWN1dGUgdGhlIHBhcnNlIGV4cHJlc3Npb24gb24gYSBzZXJpZXMgb2YgdGVzdCBzdHJpbmdzLCBzaG93aW5nIGVhY2gKICAgICAgICB0ZXN0LCB0aGUgcGFyc2VkIHJlc3VsdHMgb3Igd2hlcmUgdGhlIHBhcnNlIGZhaWxlZC4gUXVpY2sgYW5kIGVhc3kgd2F5IHRvCiAgICAgICAgcnVuIGEgcGFyc2UgZXhwcmVzc2lvbiBhZ2FpbnN0IGEgbGlzdCBvZiBzYW1wbGUgc3RyaW5ncy4KICAgICAgICAgICAKICAgICAgICBQYXJhbWV0ZXJzOgogICAgICAgICAtIHRlc3RzIC0gYSBsaXN0IG9mIHNlcGFyYXRlIHRlc3Qgc3RyaW5ncywgb3IgYSBtdWx0aWxpbmUgc3RyaW5nIG9mIHRlc3Qgc3RyaW5ncwogICAgICAgICAtIHBhcnNlQWxsIC0gKGRlZmF1bHQ9Q3tUcnVlfSkgLSBmbGFnIHRvIHBhc3MgdG8gQ3tMe3BhcnNlU3RyaW5nfX0gd2hlbiBydW5uaW5nIHRlc3RzICAgICAgICAgICAKICAgICAgICAgLSBjb21tZW50IC0gKGRlZmF1bHQ9Q3snIyd9KSAtIGV4cHJlc3Npb24gZm9yIGluZGljYXRpbmcgZW1iZWRkZWQgY29tbWVudHMgaW4gdGhlIHRlc3QgCiAgICAgICAgICAgICAgc3RyaW5nOyBwYXNzIE5vbmUgdG8gZGlzYWJsZSBjb21tZW50IGZpbHRlcmluZwogICAgICAgICAtIGZ1bGxEdW1wIC0gKGRlZmF1bHQ9Q3tUcnVlfSkgLSBkdW1wIHJlc3VsdHMgYXMgbGlzdCBmb2xsb3dlZCBieSByZXN1bHRzIG5hbWVzIGluIG5lc3RlZCBvdXRsaW5lOwogICAgICAgICAgICAgIGlmIEZhbHNlLCBvbmx5IGR1bXAgbmVzdGVkIGxpc3QKICAgICAgICAgLSBwcmludFJlc3VsdHMgLSAoZGVmYXVsdD1De1RydWV9KSBwcmludHMgdGVzdCBvdXRwdXQgdG8gc3Rkb3V0CiAgICAgICAgIC0gZmFpbHVyZVRlc3RzIC0gKGRlZmF1bHQ9Q3tGYWxzZX0pIGluZGljYXRlcyBpZiB0aGVzZSB0ZXN0cyBhcmUgZXhwZWN0ZWQgdG8gZmFpbCBwYXJzaW5nCgogICAgICAgIFJldHVybnM6IGEgKHN1Y2Nlc3MsIHJlc3VsdHMpIHR1cGxlLCB3aGVyZSBzdWNjZXNzIGluZGljYXRlcyB0aGF0IGFsbCB0ZXN0cyBzdWNjZWVkZWQKICAgICAgICAob3IgZmFpbGVkIGlmIEN7ZmFpbHVyZVRlc3RzfSBpcyBUcnVlKSwgYW5kIHRoZSByZXN1bHRzIGNvbnRhaW4gYSBsaXN0IG9mIGxpbmVzIG9mIGVhY2ggCiAgICAgICAgdGVzdCdzIG91dHB1dAogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBudW1iZXJfZXhwciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyLmNvcHkoKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgICAgIDEwMAogICAgICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgICAgICcnJykKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAgICAgMy4xNC4xNTkKICAgICAgICAgICAgICAgICcnJywgZmFpbHVyZVRlc3RzPVRydWUpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgIyB1bnNpZ25lZCBpbnRlZ2VyCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICBbMTAwXQoKICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgWy0xMDBdCgogICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgICAgICMgaW50ZWdlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgWzFlLTEyXQoKICAgICAgICAgICAgU3VjY2VzcwogICAgICAgICAgICAKICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgMTAwWgogICAgICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIGVuZCBvZiB0ZXh0IChhdCBjaGFyIDMpLCAobGluZToxLCBjb2w6NCkKCiAgICAgICAgICAgICMgbWlz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bG93aW5nIG5hbWVkIHJlc3VsdHM6CiAgICAgLSBDe21pc21hdGNoZXN9IC0gYSBsaXN0IG9mIHRoZSBwb3NpdGlvbnMgd2l0aGluIHRoZSBtYXRjaF9zdHJpbmcgd2hlcmUgbWlzbWF0Y2hlcyB3ZXJlIGZvdW5kCiAgICAgLSBDe29yaWdpbmFsfSAtIHRoZSBvcmlnaW5hbCBtYXRjaF9zdHJpbmcgdXNlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIGlucHV0IHN0cmluZwogICAgCiAgICBJZiBDe21pc21hdGNoZXN9IGlzIGFuIGVtcHR5IGxpc3QsIHRoZW4gdGhlIG1hdGNoIHdhcyBhbiBleGFjdCBtYXRjaC4KICAgIAogICAgRXhhbXBsZTo6CiAgICAgICAgcGF0dCA9IENsb3NlTWF0Y2goIkFUQ0FUQ0dBQVRHR0EiKQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FUQ0dBQVhHR0EiKSAjIC0+IChbJ0FUQ0FUQ0dBQVhHR0EnXSwgeydtaXNtYXRjaGVzJzogW1s5XV0sICdvcmlnaW5hbCc6IFsnQVRDQVRDR0FBVEdHQSddfSkKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBWENHQUFYR0dBIikgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkICdBVENBVENHQUFUR0dBJyAod2l0aCB1cCB0byAxIG1pc21hdGNoZXMpIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKCiAgICAgICAgIyBleGFjdCBtYXRjaAogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FUQ0dBQVRHR0EiKSAjIC0+IChbJ0FUQ0FUQ0dBQVRHR0EnXSwgeydtaXNtYXRjaGVzJzogW1tdXSwgJ29yaWdpbmFsJzogWydBVENBVENHQUFUR0dBJ119KQoKICAgICAgICAjIGNsb3NlIG1hdGNoIGFsbG93aW5nIHVwIHRvIDIgbWlzbWF0Y2hlcwogICAgICAgIHBhdHQgPSBDbG9zZU1hdGNoKCJBVENBVENHQUFUR0dBIiwgbWF4TWlzbWF0Y2hlcz0yKQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FYQ0dBQVhH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ZmluaW5nIGN1c3RvbSBjaGFyYWN0ZXIgc2V0IHN0cmluZ3MgZm9yIGRlZmluaW5nIAogICAgQ3tXb3JkfSBleHByZXNzaW9ucywgdXNpbmcgcmFuZ2Ugbm90YXRpb24gZnJvbSByZWd1bGFyIGV4cHJlc3Npb24gY2hhcmFjdGVyIHNldHMuCiAgICAKICAgIEEgY29tbW9uIG1pc3Rha2UgaXMgdG8gdXNlIEN7V29yZH0gdG8gbWF0Y2ggYSBzcGVjaWZpYyBsaXRlcmFsIHN0cmluZywgYXMgaW4gCiAgICBDe1dvcmQoIkFkZHJlc3MiKX0uIFJlbWVtYmVyIHRoYXQgQ3tXb3JkfSB1c2VzIHRoZSBzdHJpbmcgYXJndW1lbnQgdG8gZGVmaW5lCiAgICBJe3NldHN9IG9mIG1hdGNoYWJsZSBjaGFyYWN0ZXJzLiBUaGlzIGV4cHJlc3Npb24gd291bGQgbWF0Y2ggIkFkZCIsICJBQUEiLAogICAgImRBcmVkIiwgb3IgYW55IG90aGVyIHdvcmQgbWFkZSB1cCBvZiB0aGUgY2hhcmFjdGVycyAnQScsICdkJywgJ3InLCAnZScsIGFuZCAncycuCiAgICBUbyBtYXRjaCBhbiBleGFjdCBsaXRlcmFsIHN0cmluZywgdXNlIEx7TGl0ZXJhbH0gb3IgTHtLZXl3b3JkfS4KCiAgICBweXBhcnNpbmcgaW5jbHVkZXMgaGVscGVyIHN0cmluZ3MgZm9yIGJ1aWxkaW5nIFdvcmRzOgogICAgIC0gTHthbHBoYXN9CiAgICAgLSBMe251bXN9CiAgICAgLSBMe2FscGhhbnVtc30KICAgICAtIEx7aGV4bnVtc30KICAgICAtIEx7YWxwaGFzOGJpdH0gKGFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1IC0gYWNjZW50ZWQsIHRpbGRlZCwgdW1sYXV0ZWQsIGV0Yy4pCiAgICAgLSBMe3B1bmM4Yml0fSAobm9uLWFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1IC0gY3VycmVuY3ksIHN5bWJvbHMsIHN1cGVyc2NyaXB0cywgZGlhY3JpdGljYWxzLCBldGMuKQogICAgIC0g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IgoNYwAAAAAAAAAAAAAAAAYAAAAAAAAAczgAAABlAFoBZABaAmQBWgNkC4cAZgFkBWQGhAlaBGQMZAdkCIQBWgWHAGYBZAlkCoQIWgaHAAQAWgdTACkNcicAAABhqwUAAAogICAgVG9rZW4gZm9yIG1hdGNoaW5nIHN0cmluZ3MgdGhhdCBhcmUgZGVsaW1pdGVkIGJ5IHF1b3RpbmcgY2hhcmFjdGVycy4KICAgIAogICAgRGVmaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKICAgICAgICAtIHF1b3RlQ2hhciAtIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGRlZmluaW5nIHRoZSBxdW90ZSBkZWxpbWl0aW5nIHN0cmluZwogICAgICAgIC0gZXNjQ2hhciAtIGNoYXJhY3RlciB0byBlc2NhcGUgcXVvdGVzLCB0eXBpY2FsbHkgYmFja3NsYXNoIChkZWZhdWx0PUN7Tm9uZX0pCiAgICAgICAgLSBlc2NRdW90ZSAtIHNwZWNpYWwgcXVvdGUgc2VxdWVuY2UgdG8gZXNjYXBlIGFuIGVtYmVkZGVkIHF1b3RlIHN0cmluZyAoc3VjaCBhcyBTUUwncyAiIiB0byBlc2NhcGUgYW4gZW1iZWRkZWQgIikgKGRlZmF1bHQ9Q3tOb25lfSkKICAgICAgICAtIG11bHRpbGluZSAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHF1b3RlcyBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcyAoZGVmYXVsdD1De0ZhbHNlfSkKICAgICAgICAtIHVucXVvdGVSZXN1bHRzIC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hdGNoZWQgdGV4dCBzaG91bGQgYmUgdW5xdW90ZWQgKGRlZmF1bHQ9Q3tUcnVlfSkKICAgICAgICAtIGVuZFF1b3RlQ2hhciAtIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGRlZmluaW5nIHRoZSBlbmQgb2YgdGhlIHF1b3RlIGRlbGltaXRlZCBzdHJpbmcgKGRlZmF1bHQ9Q3tOb25lfSA9PiBzYW1lIGFzIHF1b3RlQ2hhcikKICAgICAgICAtIGNv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aCAodXNpbmcgb3BlcmF0b3IgJyYnKSB0byBhY2NlcHQgYXR0cmlidXRlcyBpbiBhbnkgb3JkZXIgCiAgICAgICAgIyAoc2hhcGUgYW5kIHBvc24gYXJlIHJlcXVpcmVkLCBjb2xvciBhbmQgc2l6ZSBhcmUgb3B0aW9uYWwpCiAgICAgICAgc2hhcGVfc3BlYyA9IHNoYXBlX2F0dHIgJiBwb3NuX2F0dHIgJiBPcHRpb25hbChjb2xvcl9hdHRyKSAmIE9wdGlvbmFsKHNpemVfYXR0cikKCiAgICAgICAgc2hhcGVfc3BlYy5ydW5UZXN0cygnJycKICAgICAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgICAgICBjb2xvcjpHUkVFTiBzaXplOjIwIHNoYXBlOlRSSUFOR0xFIHBvc246MjAsNDAKICAgICAgICAgICAgJycnCiAgICAgICAgICAgICkKICAgIHByaW50czo6CiAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICBbJ3NoYXBlOicsICdTUVVBUkUnLCAnY29sb3I6JywgJ0JMQUNLJywgJ3Bvc246JywgWycxMDAnLCAnLCcsICcxMjAnXV0KICAgICAgICAtIGNvbG9yOiBCTEFDSwogICAgICAgIC0gcG9zbjogWycxMDAnLCAnLCcsICcxMjAnXQogICAgICAgICAgLSB4OiAxMDAKICAgICAgICAgIC0geTogMTIwCiAgICAgICAgLSBzaGFwZTogU1FVQVJFCgoKICAgICAgICBzaGFwZTogQ0lSQ0xFIHNpemU6IDUwIGNvbG9yOiBCTFVFIHBvc246IDUwLDgwCiAgICAgICAgWydzaGFwZTonLCAnQ0lSQ0xFJywgJ3NpemU6JywgJzUwJywgJ2NvbG9yOicsICdCTFVFJywgJ3Bvc246JywgWyc1MCcsICcsJywgJzgwJ11dCiAgICAgICAgLSBjb2xvcjogQkxVRQogICAgICAgIC0gcG9zbjogWyc1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ZXNzaW9uLgogICAgCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gZXhwciAtIGV4cHJlc3Npb24gdGhhdCBtdXN0IG1hdGNoIG9uZSBvciBtb3JlIHRpbWVzCiAgICAgLSBzdG9wT24gLSAoZGVmYXVsdD1De05vbmV9KSAtIGV4cHJlc3Npb24gZm9yIGEgdGVybWluYXRpbmcgc2VudGluZWwKICAgICAgICAgIChvbmx5IHJlcXVpcmVkIGlmIHRoZSBzZW50aW5lbCB3b3VsZCBvcmRpbmFyaWx5IG1hdGNoIHRoZSByZXBldGl0aW9uIAogICAgICAgICAgZXhwcmVzc2lvbikgICAgICAgICAgCgogICAgRXhhbXBsZTo6CiAgICAgICAgZGF0YV93b3JkID0gV29yZChhbHBoYXMpCiAgICAgICAgbGFiZWwgPSBkYXRhX3dvcmQgKyBGb2xsb3dlZEJ5KCc6JykKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCgogICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBCTEFDSyIKICAgICAgICBPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5wcHJpbnQoKSAgIyBGYWlsISByZWFkICdjb2xvcicgYXMgZGF0YSBpbnN0ZWFkIG9mIG5leHQgbGFiZWwgLT4gW1snc2hhcGUnLCAnU1FVQVJFIGNvbG9yJ11dCgogICAgICAgICMgdXNlIHN0b3BPbiBhdHRyaWJ1dGUgZm9yIE9uZU9yTW9yZSB0byBhdm9pZCByZWFkaW5nIGxhYmVsIHN0cmluZyBhcyBwYXJ0IG9mIHRoZSBkYXRhCiAgICAgICAgYXR0cl9leHByID0gR3JvdXAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCiAgICAgICAgT25lT3JNb3JlKGF0dHJfZXhwciku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JycnCiAgICAgICAgICAgIE91dHN0YW5kaW5nIElzc3VlcyBSZXBvcnQgLSAxIEphbiAyMDAwCgogICAgICAgICAgICAgICAjIHwgU2V2ZXJpdHkgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEYXlzIE9wZW4KICAgICAgICAgICAgLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tCiAgICAgICAgICAgICAxMDEgfCBDcml0aWNhbCB8IEludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2ggICAgICAgICAgICAgICAgIHwgICAgICAgICAgNgogICAgICAgICAgICAgIDk0IHwgQ29zbWV0aWMgfCBTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJykgICAgICAgICB8ICAgICAgICAgMTQKICAgICAgICAgICAgICA3OSB8IE1pbm9yICAgIHwgU3lzdGVtIHNsb3cgd2hlbiBydW5uaW5nIHRvbyBtYW55IHJlcG9ydHMgfCAgICAgICAgIDQ3CiAgICAgICAgICAgICcnJwogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgU0VQID0gU3VwcHJlc3MoJ3wnKQogICAgICAgICMgdXNlIFNraXBUbyB0byBzaW1wbHkgbWF0Y2ggZXZlcnl0aGluZyB1cCB1bnRpbCB0aGUgbmV4dCBTRVAKICAgICAgICAjIC0gaWdub3JlIHF1b3RlZCBzdHJpbmdzLCBzbyB0aGF0IGEgJ3wnIGNoYXJhY3RlciBpbnNpZGUgYSBxdW90ZWQgc3RyaW5nIGRvZXMgbm90IG1hdGNoCiAgICAgICAgIyAtIHBhcnNlIGFjdGlvbiB3aWxsIGNhbGwgdG9rZW4uc3RyaXAoKSBmb3IgZWFjaCBtYXRjaGVkIHRva2VuLCBpLmUuLCB0aGUgZGVzY3JpcHRpb24gYm9keQogICAgICAgIHN0cmluZ19kYXRhID0gU2tpcFRvKFNFUCwgaWdub3JlPXF1b3RlZFN0cmluZykKICAgICAgICBzdHJpbmdfZGF0YS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIuc3RyaXApKQogICAgICAgIHRpY2tldF9leHByID0gKGludGVnZXIoImlzc3VlX251bSIpICsgU0VQIAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgic2V2IikgKyBTRVAgCiAgICAgICAgICAgICAgICAgICAgICArIHN0cmluZ19kYXRhKCJkZXNjIikgKyBTRVAgCiAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIoImRheXNfb3BlbiIpKQogICAgICAgIAogICAgICAgIGZvciB0a3QgaW4gdGlja2V0X2V4cHIuc2VhcmNoU3RyaW5nKHJlcG9ydCk6CiAgICAgICAgICAgIHByaW50IHRrdC5kdW1wKCkKICAgIHByaW50czo6CiAgICAgICAgWycxMDEnLCAnQ3JpdGljYWwnLCAnSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaCcsICc2J10KICAgICAgICAtIGRheXNfb3BlbjogNgogICAgICAgIC0gZGVzYzogSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaAogICAgICAgIC0gaXNzdWVfbnVtOiAxMDEKICAgICAgICAtIHNldjogQ3JpdGljYWwKICAgICAgICBbJzk0JywgJ0Nvc21ldGljJywgIlNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKSIsICcxNCddCiAgICAgICAgLSBkYXlzX29wZW46IDE0CiAgICAgICAgLSBkZXNjOiBTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJykKICAgICAgICAtIGlzc3VlX251bTogOTQKICAgICAgICAtIHNldjogQ29zbWV0aWMKICAgICAgICBbJzc5JywgJ01pbm9yJywgJ1N5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzJywgJzQ3J10KICAgICAgICAtIGRheXNfb3BlbjogNDcKICAgICAgICAtIGRlc2M6IFN5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzCiAgICAgICAgLSBpc3N1ZV9udW06IDc5CiAgICAgICAgLSBzZXY6IE1p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T25lT3JNb3JlKGRhdGFfd29yZCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogbGlnaHQgYmx1ZSB0ZXh0dXJlOiBidXJsYXAiCiAgICAgICAgYXR0cl9leHByID0gKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIAogICAgICAgICMgcHJpbnQgYXR0cmlidXRlcyBhcyBwbGFpbiBncm91cHMKICAgICAgICBwcmludChPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5kdW1wKCkpCiAgICAgICAgCiAgICAgICAgIyBpbnN0ZWFkIG9mIE9uZU9yTW9yZShleHByKSwgcGFyc2UgdXNpbmcgRGljdChPbmVPck1vcmUoR3JvdXAoZXhwcikpKSAtIERpY3Qgd2lsbCBhdXRvLWFzc2lnbiBuYW1lcwogICAgICAgIHJlc3VsdCA9IERpY3QoT25lT3JNb3JlKEdyb3VwKGF0dHJfZXhwcikpKS5wYXJzZVN0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCiAgICAgICAgCiAgICAgICAgIyBhY2Nlc3MgbmFtZWQgZmllbGRzIGFzIGRpY3QgZW50cmllcywgb3Igb3V0cHV0IGFzIGRpY3QKICAgICAgICBwcmludChyZXN1bHRbJ3NoYXBlJ10pICAgICAgICAKICAgICAgICBwcmludChyZXN1bHQuYXNEaWN0KCkpCiAgICBwcmludHM6OgogICAgICAgIFsnc2hhcGUnLCAnU1FVQVJFJywgJ3Bvc24nLCAndXBwZXIgbGVmdCcsICdjb2xvcicsICdsaWdodCBibHVlJywgJ3RleHR1cmUnLCAnYnVybGFwJ10KCiAgICAgICAgW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsncG9zbicsICd1cHBlciBsZWZ0J10sIFsnY29sb3InLCAnbGlnaHQgYmx1ZSddLCBbJ3Rl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AVMAKQNhdAMAAAogICAgRGVjb3JhdG9yIGZvciBkZWJ1Z2dpbmcgcGFyc2UgYWN0aW9ucy4gCiAgICAKICAgIFdoZW4gdGhlIHBhcnNlIGFjdGlvbiBpcyBjYWxsZWQsIHRoaXMgZGVjb3JhdG9yIHdpbGwgcHJpbnQgQ3siPj4gZW50ZXJpbmcgSXttZXRob2QtbmFtZX0obGluZTpJe2N1cnJlbnRfc291cmNlX2xpbmV9LCBJe3BhcnNlX2xvY2F0aW9ufSwgSXttYXRjaGVkX3Rva2Vuc30pIi59CiAgICBXaGVuIHRoZSBwYXJzZSBhY3Rpb24gY29tcGxldGVzLCB0aGUgZGVjb3JhdG9yIHdpbGwgcHJpbnQgQ3siPDwifSBmb2xsb3dlZCBieSB0aGUgcmV0dXJuZWQgdmFsdWUsIG9yIGFueSBleGNlcHRpb24gdGhhdCB0aGUgcGFyc2UgYWN0aW9uIHJhaXNlZC4KCiAgICBFeGFtcGxlOjoKICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKQoKICAgICAgICBAdHJhY2VQYXJzZUFjdGlvbgogICAgICAgIGRlZiByZW1vdmVfZHVwbGljYXRlX2NoYXJzKHRva2Vucyk6CiAgICAgICAgICAgIHJldHVybiAnJy5qb2luKHNvcnRlZChzZXQoJycuam9pbih0b2tlbnMpKSkpCgogICAgICAgIHdkcyA9IE9uZU9yTW9yZSh3ZCkuc2V0UGFyc2VBY3Rpb24ocmVtb3ZlX2R1cGxpY2F0ZV9jaGFycykKICAgICAgICBwcmludCh3ZHMucGFyc2VTdHJpbmcoInNsa2RqcyBzbGQgc2xkZCBzZGxmIHNkbGpmIikpCiAgICBwcmludHM6OgogICAgICAgID4+ZW50ZXJpbmcgcmVtb3ZlX2R1cGxpY2F0ZV9jaGFycyhsaW5lOiAnc2xrZGpzIHNsZCBzbGRkIHNkbGYgc2RsamYnLCAwLCAoWydzbGtkanMnLCAnc2xkJywgJ3NsZGQnLCAnc2RsZicsICdzZGxqZiddLCB7fSkpCiAgICAgICAgPDxsZWF2aW5nIHJlbW92ZV9kdXBsaWNhdGVfY2hhcnMgKHJldDogJ2RmamtscycpCiAgICAgICAgWydkZmprbHMnXQogICAgYwAAAAAA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byBxdWlja2x5IGRlZmluZSBhIHNldCBvZiBhbHRlcm5hdGl2ZSBMaXRlcmFscywgYW5kIG1ha2VzIHN1cmUgdG8gZG8KICAgIGxvbmdlc3QtZmlyc3QgdGVzdGluZyB3aGVuIHRoZXJlIGlzIGEgY29uZmxpY3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIGlucHV0IG9yZGVyLAogICAgYnV0IHJldHVybnMgYSBDe0x7TWF0Y2hGaXJzdH19IGZvciBiZXN0IHBlcmZvcm1hbmNlLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBzdHJzIC0gYSBzdHJpbmcgb2Ygc3BhY2UtZGVsaW1pdGVkIGxpdGVyYWxzLCBvciBhIGNvbGxlY3Rpb24gb2Ygc3RyaW5nIGxpdGVyYWxzCiAgICAgLSBjYXNlbGVzcyAtIChkZWZhdWx0PUN7RmFsc2V9KSAtIHRyZWF0IGFsbCBsaXRlcmFscyBhcyBjYXNlbGVzcwogICAgIC0gdXNlUmVnZXggLSAoZGVmYXVsdD1De1RydWV9KSAtIGFzIGFuIG9wdGltaXphdGlvbiwgd2lsbCBnZW5lcmF0ZSBhIFJlZ2V4CiAgICAgICAgICBvYmplY3Q7IG90aGVyd2lzZSwgd2lsbCBnZW5lcmF0ZSBhIEN7TWF0Y2hGaXJzdH0gb2JqZWN0IChpZiBDe2Nhc2VsZXNzPVRydWV9LCBvcgogICAgICAgICAgaWYgY3JlYXRpbmcgYSBDe1JlZ2V4fSByYWlzZXMgYW4gZXhjZXB0aW9uKQoKICAgIEV4YW1wbGU6OgogICAgICAgIGNvbXBfb3BlciA9IG9uZU9mKCI8ID0gPiA8PSA+PSAhPSIpCiAgICAgICAgdmFyID0gV29yZChhbHBoYXMpCiAgICAgICAgbnVtYmVyID0gV29yZChudW1zKQogICAgICAgIHRlcm0gPSB2YXIgfCBudW1iZXIKICAgICAgICBjb21wYXJpc29uX2V4cHIgPSB0ZXJtICsgY29tcF9vcGVyICsgdGVybQogICAgICAgIHByaW50KGNvbXBhcmlzb25fZXhwci5zZWFyY2hTdHJpbmcoIkIgPSAxMiAgQUE9MjMgQjw9QUEgQUE+MTIiKSkKICAgIHByaW50czo6CiAgICAgICAgW1snQics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ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IGxpZ2h0IGJsdWUgdGV4dHVyZTogYnVybGFwIgogICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKICAgICAgICBwcmludChPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5kdW1wKCkpCiAgICAgICAgCiAgICAgICAgYXR0cl9sYWJlbCA9IGxhYmVsCiAgICAgICAgYXR0cl92YWx1ZSA9IFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKQoKICAgICAgICAjIHNpbWlsYXIgdG8gRGljdCwgYnV0IHNpbXBsZXIgY2FsbCBmb3JtYXQKICAgICAgICByZXN1bHQgPSBkaWN0T2YoYXR0cl9sYWJlbCwgYXR0cl92YWx1ZSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIHByaW50KHJlc3VsdFsnc2hhcGUnXSkKICAgICAgICBwcmludChyZXN1bHQuc2hhcGUpICAjIG9iamVjdCBhdHRyaWJ1dGUgYWNjZXNzIHdvcmtzIHRvbwogICAgICAgIHByaW50KHJlc3VsdC5hc0RpY3QoKSkKICAgIHByaW50czo6CiAgICAgICAgW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsncG9zbicsICd1cHBlciBsZWZ0J10sIFsnY29sb3InLCAnbGlnaHQgYmx1ZSddLCBbJ3RleHR1cmUnLCAnYnVybGFwJ11dCiAgICAgICAgLSBjb2xvcjogbGlnaHQgYmx1ZQogICAgICAgIC0gcG9zbjogdXBwZXIgbGVmdAogICAgICAgIC0gc2hhcGU6IFNRVUFSRQogICAgICAgIC0gdGV4dHVyZTogYnVybGFwCiAgICAgICAgU1FVQVJFCiAgICAgICAgU1FVQVJFCiAgICAgICAg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AWQEgwJqAYMDfQNXAG4cBAB0AmsKckIBAAEAAQB0A4gBgwF9A1kAbgJYAHwDfAJfAXwCUwApBWFHBQAACiAgICBIZWxwZXIgdG8gZGVmaW5lIGEgcGFyc2UgYWN0aW9uIGJ5IG1hcHBpbmcgYSBmdW5jdGlvbiB0byBhbGwgZWxlbWVudHMgb2YgYSBQYXJzZVJlc3VsdHMgbGlzdC5JZiBhbnkgYWRkaXRpb25hbCAKICAgIGFyZ3MgYXJlIHBhc3NlZCwgdGhleSBhcmUgZm9yd2FyZGVkIHRvIHRoZSBnaXZlbiBmdW5jdGlvbiBhcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhZnRlcgogICAgdGhlIHRva2VuLCBhcyBpbiBDe2hleF9pbnRlZ2VyID0gV29yZChoZXhudW1zKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChpbnQsIDE2KSl9LCB3aGljaCB3aWxsIGNvbnZlcnQgdGhlCiAgICBwYXJzZWQgZGF0YSB0byBhbiBpbnRlZ2VyIHVzaW5nIGJhc2UgMTYuCgogICAgRXhhbXBsZSAoY29tcGFyZSB0aGUgbGFzdCB0byBleGFtcGxlIGluIEx7UGFyc2VyRWxlbWVudC50cmFuc2Zvcm1TdHJpbmd9OjoKICAgICAgICBoZXhfaW50cyA9IE9uZU9yTW9yZShXb3JkKGhleG51bXMpKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChpbnQsIDE2KSkKICAgICAgICBoZXhfaW50cy5ydW5UZXN0cygnJycKICAgICAgICAgICAgMDAgMTEgMjIgYWEgRkYgMGEgMGQgMWEKICAgICAgICAgICAgJycnKQogICAgICAgIAogICAgICAgIHVwcGVyd29yZCA9IFdvcmQoYWxwaGFzKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIudXBwZXIpKQogICAgICAgIE9uZU9yTW9yZSh1cHBlcndvcmQpLnJ1blRlc3RzKCcnJwogICAgICAgICAgICBteSBraW5nZG9tIGZvciBhIGhvcnNlCiAgICAgICAgICAgICcnJykKCiAgICAgICAgd2QgPSBXb3JkKGFscGhhcykuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnRpdGxlKSkK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AEQAgwGJAIcAZgFkBGQFhAh9AnwCUwApBmE8CAAACiAgICBIZWxwZXIgdG8gY3JlYXRlIGEgdmFsaWRhdGluZyBwYXJzZSBhY3Rpb24gdG8gYmUgdXNlZCB3aXRoIHN0YXJ0IHRhZ3MgY3JlYXRlZAogICAgd2l0aCBDe0x7bWFrZVhNTFRhZ3N9fSBvciBDe0x7bWFrZUhUTUxUYWdzfX0uIFVzZSBDe3dpdGhBdHRyaWJ1dGV9IHRvIHF1YWxpZnkgYSBzdGFydGluZyB0YWcKICAgIHdpdGggYSByZXF1aXJlZCBhdHRyaWJ1dGUgdmFsdWUsIHRvIGF2b2lkIGZhbHNlIG1hdGNoZXMgb24gY29tbW9uIHRhZ3Mgc3VjaCBhcwogICAgQ3s8VEQ+fSBvciBDezxESVY+fS4KCiAgICBDYWxsIEN7d2l0aEF0dHJpYnV0ZX0gd2l0aCBhIHNlcmllcyBvZiBhdHRyaWJ1dGUgbmFtZXMgYW5kIHZhbHVlcy4gU3BlY2lmeSB0aGUgbGlzdAogICAgb2YgZmlsdGVyIGF0dHJpYnV0ZXMgbmFtZXMgYW5kIHZhbHVlcyBhczoKICAgICAtIGtleXdvcmQgYXJndW1lbnRzLCBhcyBpbiBDeyhhbGlnbj0icmlnaHQiKX0sIG9yCiAgICAgLSBhcyBhbiBleHBsaWNpdCBkaWN0IHdpdGggQ3sqKn0gb3BlcmF0b3IsIHdoZW4gYW4gYXR0cmlidXRlIG5hbWUgaXMgYWxzbyBhIFB5dGhvbgogICAgICAgICAgcmVzZXJ2ZWQgd29yZCwgYXMgaW4gQ3sqKnsiY2xhc3MiOiJDdXN0b21lciIsICJhbGlnbiI6InJpZ2h0In19CiAgICAgLSBhIGxpc3Qgb2YgbmFtZS12YWx1ZSB0dXBsZXMsIGFzIGluICggKCJuczE6Y2xhc3MiLCAiQ3VzdG9tZXIiKSwgKCJuczI6YWxpZ24iLCJyaWdodCIpICkKICAgIEZvciBhdHRyaWJ1dGUgbmFtZXMgd2l0aCBhIG5hbWVzcGFjZSBwcmVmaXgsIHlvdSBtdXN0IHVzZSB0aGUgc2Vjb25kIGZvcm0uICBBdHRyaWJ1dGUKICAgIG5hbWVzIGFyZSBtYXRjaGVkIGluc2Vuc2l0aXZlIHRvIHVwcGVyL2xvd2VyIGNhc2UuCiAgICAgICAKICAgIElmIGp1c3QgdGVzdGluZyBmb3IgQ3tjbGFzc30gKHdpdGggb3Igd2l0aG91dCBhIG5hbWVzcGFjZSksIHVzZSBDe0x7d2l0aENsYXNzfX0uCgogICAgVG8gdmVyaWZ5IHRoYXQgdGhlIGF0dHJpYnV0ZSBleGlzdHMsIGJ1dCB3aXRob3V0IHNwZWNpZnlpbmcgYSB2YWx1ZSwgcGFzcwogICAgQ3t3aXRoQXR0cmlidXRlLkFOWV9WQUxVRX0gYXMgdGhlIHZhbHVlLgoKICAgIEV4YW1wbGU6OgogICAgICAgIGh0bWwgPSAnJycKICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgU29tZSB0ZXh0CiAgICAgICAgICAgIDxkaXYgdHlwZT0iZ3JpZCI+MSA0IDAgMSAwPC9kaXY+CiAgICAgICAgICAgIDxkaXYgdHlwZT0iZ3JhcGgiPjEsMyAyLDMgMSwxPC9kaXY+CiAgICAgICAgICAgIDxkaXY+dGhpcyBoYXMgbm8gdHlwZTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICcnJwogICAgICAgIGRpdixkaXZfZW5kID0gbWFrZUhUTUxUYWdzKCJkaXYiKQoKICAgICAgICAjIG9ubHkgbWF0Y2ggZGl2IHRhZyBoYXZpbmcgYSB0eXBlIGF0dHJpYnV0ZSB3aXRoIHZhbHVlICJncmlkIgogICAgICAgIGRpdl9ncmlkID0gZGl2KCkuc2V0UGFyc2VBY3Rpb24od2l0aEF0dHJpYnV0ZSh0eXBlPSJncmlkIikpCiAgICAgICAgZ3JpZF9leHByID0gZGl2X2dyaWQgKyBTa2lwVG8oZGl2IHwgZGl2X2VuZCkoImJvZHkiKQogICAgICAgIGZvciBncmlkX2hlYWRlciBpbiBncmlkX2V4cHIuc2VhcmNoU3RyaW5nKGh0bWwpOgogICAgICAgICAgICBwcmludChncmlkX2hlYWRlci5ib2R5KQogICAgICAgIAogICAgICAgICMgY29uc3RydWN0IGEgbWF0Y2ggd2l0aCBhbnkgZGl2IHRhZyBoYXZpbmcgYSB0eXBlIGF0dHJpYnV0ZSwgcmVn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EKAEfAyhAXwFQgBLAH0PfA99BXEiVwB8BHwFSwB9BHwEUwApDGFECgAACiAgICBIZWxwZXIgbWV0aG9kIGZvciBjb25zdHJ1Y3RpbmcgZ3JhbW1hcnMgb2YgZXhwcmVzc2lvbnMgbWFkZSB1cCBvZgogICAgb3BlcmF0b3JzIHdvcmtpbmcgaW4gYSBwcmVjZWRlbmNlIGhpZXJhcmNoeS4gIE9wZXJhdG9ycyBtYXkgYmUgdW5hcnkgb3IKICAgIGJpbmFyeSwgbGVmdC0gb3IgcmlnaHQtYXNzb2NpYXRpdmUuICBQYXJzZSBhY3Rpb25zIGNhbiBhbHNvIGJlIGF0dGFjaGVkCiAgICB0byBvcGVyYXRvciBleHByZXNzaW9ucy4gVGhlIGdlbmVyYXRlZCBwYXJzZXIgd2lsbCBhbHNvIHJlY29nbml6ZSB0aGUgdXNlIAogICAgb2YgcGFyZW50aGVzZXMgdG8gb3ZlcnJpZGUgb3BlcmF0b3IgcHJlY2VkZW5jZXMgKHNlZSBleGFtcGxlIGJlbG93KS4KICAgIAogICAgTm90ZTogaWYgeW91IGRlZmluZSBhIGRlZXAgb3BlcmF0b3IgbGlzdCwgeW91IG1heSBzZWUgcGVyZm9ybWFuY2UgaXNzdWVzCiAgICB3aGVuIHVzaW5nIGluZml4Tm90YXRpb24uIFNlZSBMe1BhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdH0gZm9yIGEKICAgIG1lY2hhbmlzbSB0byBwb3RlbnRpYWxseSBpbXByb3ZlIHlvdXIgcGFyc2VyIHBlcmZvcm1hbmNlLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBiYXNlRXhwciAtIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBtb3N0IGJhc2ljIGVsZW1lbnQgZm9yIHRoZSBuZXN0ZWQKICAgICAtIG9wTGlzdCAtIGxpc3Qgb2YgdHVwbGVzLCBvbmUgZm9yIGVhY2ggb3BlcmF0b3IgcHJlY2VkZW5jZSBsZXZlbCBpbiB0aGUKICAgICAgZXhwcmVzc2lvbiBncmFtbWFyOyBlYWNoIHR1cGxlIGlzIG9mIHRoZSBmb3JtCiAgICAgIChvcEV4cHIsIG51bVRlcm1zLCByaWdodExlZnRBc3NvYywgcGFyc2VBY3Rpb24pLCB3aGVyZToKICAgICAgIC0gb3BFeHByIGlzIHRoZSBweXBhcnNpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9wZXJhdG9yOwogICAgICAgICAgbWF5IGFsc28gYmUgYSBzdHJpbmcsIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgTGl0ZXJhbDsKICAgICAgICAgIGlmIG51bVRlcm1zIGlzIDMsIG9wRXhwciBpcyBhIHR1cGxlIG9mIHR3byBleHByZXNzaW9ucywgZm9yIHRoZQogICAgICAgICAgdHdvIG9wZXJhdG9ycyBzZXBhcmF0aW5nIHRoZSAzIHRlcm1zCiAgICAgICAtIG51bVRlcm1zIGlzIHRoZSBudW1iZXIgb2YgdGVybXMgZm9yIHRoaXMgb3BlcmF0b3IgKG11c3QKICAgICAgICAgIGJlIDEsIDIsIG9yIDMpCiAgICAgICAtIHJpZ2h0TGVmdEFzc29jIGlzIHRoZSBpbmRpY2F0b3Igd2hldGhlciB0aGUgb3BlcmF0b3IgaXMKICAgICAgICAgIHJpZ2h0IG9yIGxlZnQgYXNzb2NpYXRpdmUsIHVzaW5nIHRoZSBweXBhcnNpbmctZGVmaW5lZAogICAgICAgICAgY29uc3RhbnRzIEN7b3BBc3NvYy5SSUdIVH0gYW5kIEN7b3BBc3NvYy5MRUZUfS4KICAgICAgIC0gcGFyc2VBY3Rpb24gaXMgdGhlIHBhcnNlIGFjdGlvbiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAgIGV4cHJlc3Npb25zIG1hdGNoaW5nIHRoaXMgb3BlcmF0b3IgZXhwcmVzc2lvbiAodGhlCiAgICAgICAgICBwYXJzZSBhY3Rpb24gdHVwbGUgbWVtYmVyIG1heSBiZSBvbWl0dGVkKTsgaWYgdGhlIHBhcnNlIGFjdGlvbgogICAgICAgICAgaXMgcGFzc2VkIGEgdHVwbGUgb3IgbGlzdCBvZiBmdW5jdGlvbnMsIHRoaXMgaXMgZXF1aXZhbGVudCB0bwogICAgICAgICAgY2FsbGluZyBDe3NldFBhcnNlQWN0aW9uKCpmbil9IChMe1BhcnNlckVsZW1lbnQuc2V0UGFyc2VBY3Rpb259KQogICAgIC0gbHBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIGxlZnQtcGFyZW50aGVzZXMgKGRlZmF1bHQ9Q3tTdXBwcmVzcygnKCcpfSkKICAgICAtIHJwYXIgLSBleHByZXNzaW9uIGZvciBtYXRjaGluZyByaWdodC1wYXJlbnRoZXNlcyAoZGVmYXVsdD1De1N1cHByZXNzKCcpJyl9KQoKICAgIEV4YW1wbGU6OgogICAgICAgICMgc2ltcGxlIGV4YW1wbGUgb2YgZm91ci1mdW5jdGlvbiBhcml0aG1ldGljIHdpdGggaW50cyBhbmQgdmFyaWFibGUgbmFtZXMKICAgICAgICBpbnRlZ2VyID0gcHlwYXJzaW5nX2NvbW1vbi5zaWduZWRfaW50ZWdlcgogICAgICAgIHZhcm5hbWUgPSBweXBhcnNpbmdfY29tbW9uLmlkZW50aWZpZXIgCiAgICAgICAgCiAgICAgICAgYXJpdGhfZXhwciA9IGluZml4Tm90YXRpb24oaW50ZWdlciB8IHZhcm5hbWUsCiAgICAgICAgICAgIFsKICAgICAgICAgICAgKCctJywgMSwgb3BBc3NvYy5SSUdIVCksCiAgICAgICAgICAgIChvbmVPZignKiAvJyksIDIsIG9wQXNzb2MuTEVGVCksCiAgICAgICAgICAgIChvbmVPZignKyAtJyksIDIsIG9wQXNzb2MuTEVGVCksCiAgICAgICAgICAgIF0pCiAgICAgICAgCiAgICAgICAgYXJpdGhfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgNSszKjYKICAgICAgICAgICAgKDUrMykqNgogICAgICAgICAgICAtMi0tMTEKICAgICAgICAgICAgJycnLCBmdWxsRHVtcD1GYWxzZSkKICAgIHByaW50czo6CiAgICAgICAgNSszKjYKICAgICAgICBbWzUsICcrJywgWzMsICcqJywgNl1dXQoKICAgICAgICAoNSszKSo2CiAgICAgICAgW1tbNSwgJysnLCAzXSwgJyonLCA2XV0KCiAgICAgICAgLTItLTExCiAgICAgICAgW1tbJy0nLCAyXSwgJy0nLCBbJy0nLCAxMV1dXQogICAgKQFOTnJjAgAAcnEAAAB6ByVzIHRlcm16CSVzJXMg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ZCBmb3IgdGhlIGNvbnRlbnQgYXJndW1lbnQsIHRoZSBuZXN0ZWQKICAgIGV4cHJlc3Npb24gd2lsbCBjYXB0dXJlIGFsbCB3aGl0ZXNwYWNlLWRlbGltaXRlZCBjb250ZW50IGJldHdlZW4gZGVsaW1pdGVycwogICAgYXMgYSBsaXN0IG9mIHNlcGFyYXRlIHZhbHVlcy4KCiAgICBVc2UgdGhlIEN7aWdub3JlRXhwcn0gYXJndW1lbnQgdG8gZGVmaW5lIGV4cHJlc3Npb25zIHRoYXQgbWF5IGNvbnRhaW4KICAgIG9wZW5pbmcgb3IgY2xvc2luZyBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIG9wZW5pbmcKICAgIG9yIGNsb3NpbmcgY2hhcmFjdGVycyBmb3IgbmVzdGluZywgc3VjaCBhcyBxdW90ZWRTdHJpbmcgb3IgYSBjb21tZW50CiAgICBleHByZXNzaW9uLiAgU3BlY2lmeSBtdWx0aXBsZSBleHByZXNzaW9ucyB1c2luZyBhbiBDe0x7T3J9fSBvciBDe0x7TWF0Y2hGaXJzdH19LgogICAgVGhlIGRlZmF1bHQgaXMgTHtxdW90ZWRTdHJpbmd9LCBidXQgaWYgbm8gZXhwcmVzc2lvbnMgYXJlIHRvIGJlIGlnbm9yZWQsCiAgICB0aGVuIHBhc3MgQ3tOb25lfSBmb3IgdGhpcyBhcmd1bWVudC4KCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhX3R5cGUgPSBvbmVPZigidm9pZCBpbnQgc2hvcnQgbG9uZyBjaGFyIGZsb2F0IGRvdWJsZSIpCiAgICAgICAgZGVjbF9kYXRhX3R5cGUgPSBDb21iaW5lKGRhdGFfdHlwZSArIE9wdGlvbmFsKFdvcmQoJyonKSkpCiAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcysnXycsIGFscGhhbnVtcysnXycpCiAgICAgICAgbnVtYmVyID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIKICAgICAgICBhcmcgPSBHcm91cChkZWNsX2RhdGFfdHlwZSArIGlkZW50KQogICAgICAgIExQQVIsUlBBUiA9IG1hcChTdXBwcmVzcywgIigpIikKCiAgICAgICAgY29kZV9ib2R5ID0gbmVzdGVkRXhwcigneycsICd9JywgaWdub3JlRXhwcj0ocXVvdGVkU3RyaW5nIHwgY1N0eWxlQ29tbWVudCkpCgogICAgICAgIGNfZnVuY3Rpb24gPSAoZGVjbF9kYXRhX3R5cGUoInR5cGUiKSAKICAgICAgICAgICAgICAgICAgICAgICsgaWRlbnQoIm5hbWUiKQogICAgICAgICAgICAgICAgICAgICAgKyBMUEFSICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChhcmcpLCBbXSkoImFyZ3MiKSArIFJQQVIgCiAgICAgICAgICAgICAgICAgICAgICArIGNvZGVfYm9keSgiYm9keSIpKQogICAgICAgIGNfZnVuY3Rpb24uaWdub3JlKGNTdHlsZUNvbW1lbnQpCiAgICAgICAgCiAgICAgICAgc291cmNlX2NvZGUgPSAnJycKICAgICAgICAgICAgaW50IGlzX29kZChpbnQgeCkgeyAKICAgICAgICAgICAgICAgIHJldHVybiAoeCUyKTsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICBpbnQgZGVjX3RvX2hleChjaGFyIGhjaGFyKSB7IAogICAgICAgICAgICAgICAgaWYgKGhjaGFyID49ICcwJyAmJiBoY2hhciA8PSAnOScpIHsgCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvcmQoaGNoYXIpLW9yZCgnMCcpKTsgCiAgICAgICAgICAgICAgICB9IGVsc2UgeyAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEwK29yZChoY2hhciktb3JkKCdBJykpOwogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgfQogICAgICAgICcnJwogICAgICAgIGZvciBmdW5jIGluIGNfZnVuY3Rpb24uc2VhcmNoU3RyaW5nKHNvdXJjZV9jb2RlKToKICAgICAgICAgICAgcHJpbnQoIiUobmFtZSlzICglKHR5cGUpcykgYXJnczogJShhcmdzKXMiICUgZnVuYykKCiAgICBwcmludHM6OgogICAgICAgIGlzX29kZCAoaW50KSBhcmdzOiBbWydpbnQnLCAneCddXQogICAgICAgIGRlY190b19oZXggKGludCkgYXJnczogW1snY2hhcicsICdoY2hhciddXQogICAgei5vcGVuaW5nIGFuZCBjbG9zaW5nIHN0cmluZ3MgY2Fubm90IGJlIHRoZSBzYW1lTnKLAAAAKQFyXgIAAGMBAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAoAChAFMAKQJOcgEAAAApAXK1AAAAKQFydwAAAHJ4AAAAcngAAAByeQAAAHJ6AAAAZxQAAHJ7AAAAehxuZXN0ZWRFeHByLjxsb2NhbHM+LjxsYW1iZGE+YwEAAAAAAAAAAQAAAAIAAABTAAAAcwwAAAB8AGQBGQCgAKEAUwApAk5yAQAAACkBcrUAAAApAXJ3AAAAcngAAAByeAAAAHJ5AAAAcnoAAABqFAAAcnsAAABjAQAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAKAAoQBTACkCTnIBAAAAKQFytQAAACkBcncAAAByeAAAAHJ4AAAAcnkAAAByegAAAHAUAAByewAAAGMBAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAoAChAFMAKQJOcgEAAAApAXK1AAAAKQFydwAAAHJ4AAAAcngAAAByeQAAAHJ6AAAAdBQAAHJ7AAAAek9vcGVuaW5nIGFuZCBjbG9zaW5nIGFyZ3VtZW50cyBtdXN0IGJlIHN0cmluZ3MgaWYgbm8gY29udGVudCBleHByZXNzaW9uIGlzIGdpdmVuehZuZXN0ZWQgJXMlcyBleHByZXNzaW9uKRJy+gEAAHJ8AAAActsAAABy6AAAAHIMAAAAchsAAAByCwAAAHImAAAAcnYBAABygwAAAHJFAAAActwAAAByFwAAAHIRAAAAchMAAAByLQAAAHI0AAAAcpIBAAApBdoGb3BlbmVy2gZjbG9zZXLaB2NvbnRlbnRywgIAAHKGAAAAcngAAAByeAAAAHJ5AAAAclIAAAAlFAAAczQAAAAAOggBCAEKARgBGAEIAQgBHAEMAhgBDgIIAQQBGAEUAQwCFgEUAQwCCAEGAQoBKgIkARIBYwMAAAAAAAAACwAAAAYAAAADAAAAc+QAAACHAGYBZAFkAoQIfQOHAGYBZANkBIQIfQSHAGYBZAVkBoQIfQV0AHQBgwCgAmQHoQGgA6EAgwF9BnQEgwB0BIMAoAV8BKEBFwCgBmQIoQF9B3QEgwCgBXwDoQGgBmQJoQF9CHQEgwCgBXwFoQGgBmQKoQF9CXwCcqZ0B3QIfAaDAXwHFwB0AHwIdAd8AIMBFwB0CHwGgwEXAIMBFwB8CRcAgwF9Cm4kdAd0CHwGgwF0AHwIdAd8AIMBFwB0CHwGgwEXAIMBFwCDAX0KfACgCXQKdAGDABcAoQEBAHwKoAZkC6EBUwApDGEKCQAACiAgICBIZWxwZXIgbWV0aG9kIGZvciBkZWZpbmluZyBzcGFjZS1kZWxpbWl0ZWQgaW5kZW50YXRpb24gYmxvY2tzLCBzdWNoIGFzCiAgICB0aG9zZSB1c2VkIHRvIGRlZmluZSBibG9jayBzdGF0ZW1lbnRzIGluIFB5dGhvbiBzb3VyY2UgY29kZS4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gYmxvY2tTdGF0ZW1lbnRFeHByIC0gZXhwcmVzc2lvbiBkZWZpbmluZyBzeW50YXggb2Ygc3RhdGVtZW50IHRoYXQKICAgICAgICAgICAgaXMgcmVwZWF0ZWQgd2l0aGluIHRoZSBpbmRlbnRlZCBibG9jawogICAgIC0gaW5kZW50U3RhY2sgLSBsaXN0IGNyZWF0ZWQgYnkgY2FsbGVyIHRvIG1hbmFnZSBpbmRlbnRhdGlvbiBzdGFjawogICAgICAgICAgICAobXVsdGlwbGUgc3RhdGVtZW50V2l0aEluZGVudGVkQmxvY2sgZXhwcmVzc2lvbnMgd2l0aGluIGEgc2luZ2xlIGdyYW1tYXIKICAgICAgICAgICAgc2hvdWxkIHNoYXJlIGEgY29tbW9uIGluZGVudFN0YWNrKQogICAgIC0gaW5kZW50IC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYmxvY2sgbXVzdCBiZSBpbmRlbnRlZCBiZXlvbmQgdGhlCiAgICAgICAgICAgIHRoZSBjdXJyZW50IGxldmVsOyBzZXQgdG8gRmFsc2UgZm9yIGJsb2NrIG9mIGxlZnQtbW9zdCBzdGF0ZW1lbnRzCiAgICAgICAgICAgIChkZWZhdWx0PUN7VHJ1ZX0pCgogICAgQSB2YWxpZCBibG9jayBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIEN7YmxvY2tTdGF0ZW1lbnR9LgoKICAgIEV4YW1wbGU6OgogICAgICAgIGRhdGEgPSAnJycKICAgICAgICBkZWYgQSh6KToKICAgICAgICAgIEExCiAgICAgICAgICBCID0gMTAwCiAgICAgICAgICBHID0gQTIKICAgICAgICAgIEEyCiAgICAgICAgICBBMwogICAgICAgIEIKICAgICAgICBkZWYgQkIoYSxiLGMpOgogICAgICAgICAgQkIxCiAgICAgICAgICBkZWYgQkJBKCk6CiAgICAgICAgICAgIGJiYTEKICAgICAgICAgICAgYmJhMgogICAgICAgICAgICBiYmEzCiAgICAgICAgQwogICAgICAgIEQKICAgICAgICBkZWYgc3BhbSh4LHkpOgogICAgICAgICAgICAgZGVmIGVnZ3Moeik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICcnJwoKCiAgICAgICAgaW5kZW50U3RhY2sgPSBbMV0KICAgICAgICBzdG10ID0gRm9yd2FyZCgpCgogICAgICAgIGlkZW50aWZpZXIgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKQogICAgICAgIGZ1bmNEZWNsID0gKCJkZWYiICsgaWRlbnRpZmllciArIEdyb3VwKCAiKCIgKyBPcHRpb25hbCggZGVsaW1pdGVkTGlzdChpZGVudGlmaWVyKSApICsgIikiICkgKyAiOiIpCiAgICAgICAgZnVuY19ib2R5ID0gaW5kZW50ZWRCbG9jayhzdG10LCBpbmRlbnRTdGFjaykKICAgICAgICBmdW5jRGVmID0gR3JvdXAoIGZ1bmNEZWNsICsgZnVuY19ib2R5ICkKCiAgICAgICAgcnZhbHVlID0gRm9yd2FyZCgpCiAgICAgICAgZnVuY0NhbGwgPSBHcm91cChpZGVudGlmaWVyICsgIigiICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChydmFsdWUpKSArICIpIikKICAgICAgICBydmFsdWUgPDwgKGZ1bmNDYWxsIHwgaWRlbnRpZmllciB8IFdvcmQobnVtcykpCiAgICAgICAgYXNzaWdubWVudCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiPSIgKyBydmFsdWUpCiAgICAgICAgc3RtdCA8PCAoIGZ1bmNEZWYgfCBhc3NpZ25tZW50IHwgaWRlbnRpZmllciApCgogICAgICAgIG1vZHVsZV9ib2R5ID0gT25lT3JNb3JlKHN0bXQpCgogICAgICAgIHBhcnNlVHJlZSA9IG1vZHVsZV9ib2R5LnBhcnNlU3RyaW5nKGRhdGEpCiAgICAgICAgcGFyc2VUcmVlLnBwcmludCgpCiAgICBwcmludHM6OgogICAgICAgIFtbJ2RlZicsCiAgICAgICAgICAnQScsCiAgICAgICAgICBbJygnLCAneicsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydBMSddLCBbWydCJywgJz0nLCAnMTAwJ11dLCBbWydHJywgJz0nLCAnQTInXV0sIFsnQTInXSwgWydBMyddXV0sCiAgICAgICAgICdCJywKICAgICAgICAgWydkZWYnLAogICAgICAgICAgJ0JCJywKICAgICAgICAgIFsnKCcsICdhJywgJ2InLCAnYycsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydCQjEnXSwgW1snZGVmJywgJ0JCQScsIFsnKCcsICcpJ10sICc6JywgW1snYmJhMSddLCBbJ2JiYTInXSwgWydiYmEzJ11dXV1dXSwKICAgICAgICAgJ0MnLAogICAgICAgICAnRCcsCiAgICAgICAgIFsnZGVmJywKICAgICAgICAgICdzcGFtJywKICAgICAgICAgIFsnKCcsICd4JywgJ3knLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1tbJ2RlZicsICdlZ2dzJywgWycoJywgJ3onLCAnKSddLCAnOicsIFtbJ3Bhc3MnXV1dXV1dXSAKICAgIGMDAAAAAAAAAAQAAAAEAAAAEwAAAHNOAAAAfAF0AHwAgwFrBXIQZABTAHQBfAF8AIMCfQN8A4gAZAEZAGsDckp8A4gAZAEZAGsEcj50AnwAfAFkAoMDggF0A3wAfAFkA4MDggFkAFMAKQROcnQAAAB6D2lsbGVnYWwgbmVzdGluZ3oQbm90IGEgcGVlciBlbnRyeSkEcugAAAByOwAAAHIjAAAAciEAAAApBHKOAAAAclsBAABydwAAANoGY3VyQ29sKQHaC2lu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Y29udmVydFRvRGF0ZXRpbWV9fQogICAgIC0gQ3tMe3N0cmlwSFRNTFRhZ3N9fQogICAgIC0gQ3tMe3VwY2FzZVRva2Vuc319CiAgICAgLSBDe0x7ZG93bmNhc2VUb2tlbnN9fQoKICAgIEV4YW1wbGU6OgogICAgICAgIHB5cGFyc2luZ19jb21tb24ubnVtYmVyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICsxMDAKICAgICAgICAgICAgMy4xNDE1OQogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5mbnVtYmVyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgICAgIDEwMAogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICsxMDAKICAgICAgICAgICAgMy4xNDE1OQogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5oZXhfaW50ZWdlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgICAgICAxMDAKICAgICAgICAgICAgRkYKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmZyYWN0aW9uLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGZyYWN0aW9ucwogICAgICAgICAgICAxLzIKICAgICAgICAgICAgLTMvNAogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24ubWl4ZWRfaW50ZWdlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBtaXhlZCBmcmFjdGlvbnMKICAgICAgICAgICAgMQogICAgICAgICAgICAxLzIKICAgICAgICAgICAgLTMvNAogICAgICAgICAgICAxLTMvNAogICAgICAgICAgICAnJycpCgogICAgICAgIGltcG9ydCB1dWlkCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi51dWlkLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHV1aWQuVVVJRCkpCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi51dWlkLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIHV1aWQKICAgICAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgICAgICcnJykKICAgIHByaW50czo6CiAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgdHlwZQogICAgICAgIDEwMAogICAgICAgIFsxMDBdCgogICAgICAgIC0xMDAKICAgICAgICBbLTEwMF0KCiAgICAgICAgKzEwMAogICAgICAgIFsxMDBdCgogICAgICAgIDMuMTQxNTkKICAgICAgICBbMy4xNDE1OV0KCiAgICAgICAgNi4wMmUyMwogICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgMWUtMTIKICAgICAgICBbMWUtMTJdCgogICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgZmxvYXQKICAgICAgICAxMDAKICAgICAgICBbMTAwLjBdCgogICAgICAgIC0xMDAKICAgICAgICBbLTEwMC4wXQoKICAgICAgICArMTAwCiAgICAgICAgWzEwMC4wXQoKICAgICAgICAzLjE0MTU5CiAgICAgICAgWzMuMTQxNTldCgogICAgICAgIDYuMDJlMjMKICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgIDFlLTEyCiAgICAgICAgWzFlLTEyXQoKICAgICAgICAjIGhleCBudW1iZXJzCiAgICAgICAgMTAwCiAgICAgICAgWzI1Nl0KCiAgICAgICAgRkYKICAgICAgICBbMjU1XQoKICAg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bGUyCgogICAgICAgICMgaW52YWxpZCBTRUxFQ1Qga2V5d29yZCAtIHNob3VsZCBmYWlsCiAgICAgICAgWGVsZWN0IEEsIEIsIEMgZnJvbSBTeXMuZHVhbAoKICAgICAgICAjIGluY29tcGxldGUgY29tbWFuZCAtIHNob3VsZCBmYWlsCiAgICAgICAgU2VsZWN0CgogICAgICAgICMgaW52YWxpZCBjb2x1bW4gbmFtZSAtIHNob3VsZCBmYWlsCiAgICAgICAgU2VsZWN0IF5eXiBmcm94IFN5cy5kdWFsCgogICAgICAgIHpdCiAgICAgICAgMTAwCiAgICAgICAgLTEwMAogICAgICAgICsxMDAKICAgICAgICAzLjE0MTU5CiAgICAgICAgNi4wMmUyMwogICAgICAgIDFlLTEyCiAgICAgICAgeiAKICAgICAgICAxMDAKICAgICAgICBGRgogICAgICAgIHo2CiAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgKQFycwAAACkCcuECAABGKQFOKQJGVCkBVCkBcp4AAAApAVQp43K9AAAA2gtfX3ZlcnNpb25fX9oPX192ZXJzaW9uVGltZV9f2gpfX2F1dGhvcl9fcp8AAADaB3dlYWtyZWZyAgAAAHLkAAAActwAAABygQAAAHLxAQAAcowBAAByZwIAAHLMAQAAckQBAAByYgEAAHLDAQAAcgMAAADaB190aHJlYWRyBAAAANoLSW1wb3J0RXJyb3LaCXRocmVhZGluZ9oPY29sbGVjdGlvbnMuYWJjcgUAAAByBgAAAHIHAAAAcsgBAABaC29yZGVyZWRkaWN02gdfX2FsbF9fcvkBAADaDHZlcnNpb25faW5mb3JhAQAAcicBAADaB21heHNpemVyNgIAAHJ+AAAActsAAADaA2NocnIIAwAAcocAAAByqgIAAHLoAAAAcj4BAADaCHJldmVyc2VkctYAAABywQEAAHJAAQAAcpACAAByXAIAAHJdAgAAcm8BAABaBm1heGludNoGeHJhbmdlcukAAADaC19fYnVpbHRpbl9fco8AAADaBWZuYW1lcg8BAABycAEAAHKuAAAAcrsAAABy2AAAAHKXAAAAcskAAABymAAAANoPYXNjaWlfdXBwZXJjYXNl2g9hc2NpaV9sb3dlcmNhc2VyNgAAAHJUAAAAckYAAAByNQAAAHLyAgAAcrQAAADaCXByaW50YWJsZXJYAAAAcnEBAAByHwAAAHIhAAAAciMAAAByJQAAAHIoAAAAcsEAAAByJAAAANoIcmVnaXN0ZXJyOwAAAHJMAAAAckkAAAByVAEAAHJYAQAAcloBAAByUwAAAHJ1AQAAciYAAAByLgAAAHIPAAAAchkAAAByFwAAAHIbAwAAcnkBAAByFAAAAHIKAAAAcgkAAABybgAAAHIxAAAAcikAAAByJwAAAHILAAAAcjAAAAByiQIAAHISAAAAchYAAAByFQAAAHIsAAAAcisAAAByMwAAAHIyAAAAciIAAAByCAAAAHIeAAAAchgAAAByDgAAAHIgAAAAchAAAAByGgAAAHK2AgAAchsAAAByNAAAAHLAAgAAcsECAAByHQAAAHIqAAAAchEAAAByzwIAAHIvAAAAcgwAAAByEwAAAHINAAAAci0AAAByHAAAAHJkAAAAckIAAAByPgAAAHLpAQAAclEAAAByUAAAAHJYAgAAclUAAAByQwAAAHJpAAAAcmoAAABybAAAAHKSAQAAckUAAABySwAAAHJKAAAAcmMAAAByYgAAAHKDAAAA2gxfZXNjYXBlZFB1bmPaD19lc2NhcGVkSGV4Q2hhctoPX2VzY2FwZWRPY3RDaGFy2gtfc2luZ2xlQ2hhctoKX2NoYXJSYW5nZXKXAQAAchEDAAByYQAAAHJPAAAAcl4AAAByXAAAAHJvAAAAcmYAAAByRAAAAHIkAwAAck0AAAByTgAAAHJnAAAAciUDAABybQAAAHJWAAAAci8DAAByMAMAAHJrAAAAclcAAAByQAAAAHJgAAAAclsAAAByZQAAAHJSAAAAcmgAAAByNwAAAHJZAAAAcjkAAAByOAAAAHLZAAAAcpAAAAByTwMAAHIAAQAAcj0AAAByXQAAAHI6AAAAckcAAAByCAIAAHJfAAAAckEAAAByPwAAAHJIAAAAcloAAABy2gEAAHJ2AwAAcjwAAABycAAAAHKZAAAAWgtzZWxlY3RUb2tlbloJZnJvbVRva2Vu2gVpZGVudFoKY29sdW1uTmFtZVoOY29sdW1uTmFtZUxpc3RaCmNvbHVtblNwZWNaCXRhYmxlTmFtZVoNdGFibGVOYW1lTGlzdFoJc2ltcGxlU1FMcjQCAABybAMAAHJUAwAAclYDAABydQMAAHJiAwAAcngAAAByeAAAAHJ4AAAAcnkAAADaCDxtb2R1bGU+SwAAAHPsAQAABAIEAQQBBAIIAQwBCAEIAQgBCAEIAQgBCAEIAQgBDAICARABDgESAgICDAEQAQ4CDAESAgIBEAEQAQIBEAEQARAFEAEQAQ4BCgEKAQ4BCgEOAQoBDAEMAQoBDgEKAQoBCgEMAQoDEgEMAQYBBgEEAQQBBAMcAwYBBAIIFQQBCAEOAQIBFAEQARACFgIIChADDAEEAQgBCAEIARYCEDgQFRAFEBMQCBAKEH8AfwB/AH8AfwAHCgIIDQgMCAoIAwgDCAMIGwxAEH8AfwB/AH8AfwB/AH8AfwB/AHYQCBALEA8QJgQBBgIQQRAXEBIQPRB/ACAQSRB/AAoQRxAzEAcQGhAeEBQQDxASEBQQFxBwEEwQTxBEEHwQTRAaECAQJhAjEB8QBwYBEEAQcxBREAQQCBAsEBUQQRAaEBAILAwTDB8ICQgcCBwICAxJCCMMJQgHCBkMAQwBDAEMAQwCGAESARIBGAEUATACCBgICggOCA4ILAwDDAMIHQgTCAkIPwgCDCMGAQgBCAIWcAQDFgEWAQwBGAEeAhhaDnIKAQoCIAEWASgBCgUcAxIDFgESAyADBAMSAxABAgEwASAFEH8AfwAUDAIKAQoCEAIYARQBCgIYARQCIgMEFggCBgcIAwYHCAIGAwgCCAESAQYC
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 3
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
ordered_set.cpython-37.pyc
16.07 KB
lrw-r--r--
2023-11-13 21:35:13
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-37.pyc
198.32 KB
lrw-r--r--
2023-11-13 21:35:13
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
232 B
lrw-r--r--
2023-11-13 21:35:13
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).