REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 236.85 KB
Close
//opt/alt/python37/lib/python3.7/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-37.pyc
Text
Base64
Qg0NCgAAAACalVJl8isEAOMAAAAAAAAAAAAAAAB0AAAAQAAAAHMGDwAAZABaAGQBWgFkAloCZANaA2QEZAVsBFoEZARkBmwFbQZaBwEAZARkBWwIWghkBGQFbAlaCWQEZAVsCloKZARkBWwLWgtkBGQFbAxaDGQEZAVsDVoNZARkBWwOWg5kBGQFbA9aD2QEZAVsEFoQZARkB2wRbRFaEQEAZARkCGwSbRNaEwEAZARkBWwUWhRkBGQJbBVtFloWAQBkBGQKbBdtGFoYAQB5EGQEZAtsFG0ZWhkBAFcAbiAEAGUaawpy1AEAAQABAGQEZAxsFG0bWhkBAFkAbgJYAHkQZARkDWwcbR1aHQEAVwBuIgQAZRprCpABcggBAAEAAQBkBGQNbB5tHVodAQBZAG4CWAB5IGQEZA5sH20gWiABAGQEZA9sH20hWiFtIloiAQBXAG4yBABlGmsKkAFyXAEAAQABAGQEZA5sDW0gWiABAGQEZA9sDW0hWiFtIloiAQBZAG4CWAB5EGQEZBBsDW0jWiQBAFcAbkIEAGUaawqQAXKwAQABAAEAeRBkBGQQbCVtI1okAQBXAG4aBABlGmsKkAFyqgEAAQABAGQFWiRZAG4CWABZAG4CWAB5EGQEZBFsEG0mWiYBAFcAbiQEAGUaawqQAXLmAQABAAEARwBkEmQThABkE4MCWiZZAG4CWABlJoMAWidkFGUnXwBkFWUnXyhlJoMAWilkFmUpXwBkF2UpXypkF2UpXytkF2UpXyxkF2UpXy1kF2UpXy5kGGQZhABlL2UpgwFEAIMBZSlfMGQaZBuEAFoxZTFlKV8yZBxkHWQeZB9kIGQhZCJkI2QkZCVkJmQnZChkKWQqZCtkLGQtZC5kL2QwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZDpkO2Q8ZD1kPmQ/ZEBkQWRCZENkRGRFZEZkR2RIZElkSmRLZExkTWROZE9kUGRRZFJkU2RUZFVkVmRXZFhkWWRaZFtkXGRdZF5kX2RgZGFkYmRjZGRkZWRmZGdkaGRpZGpka2RsZG1kbmRvZHBkcWRyZHNkdGR1ZHZkd2R4ZHlkemR7ZHxkfWR+ZH9kgGSBZIJkg2SEZIVkhmSHZIhkiWSKZItkjGSNZI5kj2d0WjNlNGUJajWDAWQFZJCFAhkAWjZlNmQEGQBkkGsCWjdlN5ADcohlCWo4WjllOlo7ZTxaPWU6Wj5lOlo/ZUBlQWVCZUNlRGU0ZUVlRmVHZUhlSWcLWkpuYmUJaktaOWVMWk1kkWSShABaP2cAWkpkBGQFbE5aTnhCZJOgT6EARABdNlpQeRRlSqBRZVJlTmVQgwKhAQEAVwBuGgQAZVNrCpADcuIBAAEAAQCQA3ewWQBuAlgAkANxsFcAZVRklGSVhABlTWSWgwFEAIMBgwFaVWSXZJiEAFpWZQRqV2UEalgXAFpZZJlaWmVaZJoXAFpbZVllWhcAWlxlPGSbgwFaXWScoF5knWSVhABlBGpfRACDAaEBWmCQAWRhZJ5kjoQBWmFHAGSfZDmEAGQ5ZWKDA1pjRwBkoGQ7hABkO2VjgwNaZEcAZKFkPYQAZD1lY4MDWmVHAGSiZD+EAGQ/ZWWDA1pmRwBko2RChABkQmVigwNaZ0cAZKRkpYQAZKVlaIMDWmlHAGSmZD6EAGQ+ZWiDA1pqZSGga2VqoQEBAGSnZFaEAFpsZKhkZ4QAWm1kqWRkhABabmSqZKuEAFpvZKxkrYQAWnBkrmSvhABacWSwZG6EAFpykAFkYmSyZLOEAVpzRwBktGRAhABkQGVogwNadEcAZLVktoQAZLZldIMDWnVHAGS3ZEiEAGRIZXSDA1p2RwBkuGQohABkKGV2gwNad0cAZLlkM4QAZDNldoMDWnhHAGS6ZDCEAGQwZXaDA1p5RwBku2S8hABkvGV5gwNaemV5WntleWV0X3xHAGS9ZC2EAGQtZXaDA1p9RwBkvmQjhABkI2V5gwNafkcAZL9kIoQAZCJlfYMDWn9HAGTAZImEAGSJZXaDA1qARwBkwWRLhABkS2V2gwNagUcAZMJkw4QAZMNlgYMDWoJHAGTEZE+EAGRPZYKDA1qDRwBkxWRDhABkQ2V2gwNahEcAZMZkQYQAZEFldoMDWoVHAGTHZCSEAGQkZXaDA1qGRwBkyGRKhABkSmV2gwNah0cAZMlkyoQAZMpldoMDWohHAGTLZCuEAGQrZYiDA1qJRwBkzGQvhABkL2WIgwNaikcAZM1kLoQAZC5liIMDWotHAGTOZEaEAGRGZYiDA1qMRwBkz2RFhABkRWWIgwNajUcAZNBkTYQAZE1liIMDWo5HAGTRZEyEAGRMZYiDA1qPRwBk0mQ8hABkPGV0gwNakEcAZNNkIYQAZCFlkIMDWpFHAGTUZDiEAGQ4ZZCDA1qSRwBk1WQyhABkMmWQgwNak0cAZNZkJ4QAZCdlkIMDWpRHAGTXZDqEAGQ6ZXSDA1qVRwBk2GQphABkKWWVgwNalkcAZNlkMYQAZDFllYMDWpdHAGTaZDSEAGQ0ZZWDA1qYRwBk22TchABk3GWVgwNamUcAZN1kNYQAZDVlmYMDWppHAGTeZE6EAGROZZmDA1qbRwBk32TghABk4GVogwNanEcAZOFkN4QAZDdllYMDWp1HAGTiZESEAGREZZWDA1qeRwBk42QqhABkKmWVgwNan0cAZORkSYQAZElllYMDWqBHAGTlZCWEAGQlZaCDA1qhRwBk5mQshABkLGWggwNaokcAZOdkJoQAZCZloIMDWqNHAGToZEeEAGRHZaCDA1qkRwBk6WQ2hABkNmVogwNapWTqZH+EAFqmkAFkY2TsZF2EAVqnkAFkZGTtZFmEAVqoZO5k74QAWqlk8GRshABaqmTxZGuEAFqrZPJk84QAWqyQAWRlZPRkcIQBWq1k9WRehABarpABZGZk9mSEhAFar2T3ZIWEAFqwZPhkh4QAWrFld4MAoLJkYKEBWrNlioMAoLJkZqEBWrRli4MAoLJkZaEBWrVljIMAoLJkfqEBWrZljYMAoLJkfaEBWrdlgWVdZPlksWT6jQOguGT7ZPyEAKEBWrllhGT9gwGguGT+ZPyEAKEBWrplhGT/gwGguJABZABk/IQAoQFau2W5ZbpCAGW7QgBlhpABZAFklmT6jQJCAFq8ZaJlvGWkkAFkAoMBFwBlvBcAgwFavWV5kAFkA4MBZZ2QAWQEgwGgvpABZAWhARcAZaJlmmW9ZbxCAIMBgwGgvpABZAahARcAkAFkBxcAWr+QAWQIZHyEAFrAkAFkCWRqhABawZABZApkeYQAWsKQAWQLZHeEAFrDkAFkDGSKhABaxGXEkAFkDWT8hACDAVrFZcSQAWQOZPyEAIMBWsZlpJABZA+DAWWkkAFkEIMBZgKQAWQRkAFkEoQBWseQAWQTZGiEAFrIkAFkFGRphABayZABZBVkgoQAWsplaIMAZcpfy5ABZGeQAWQWZIiEAVrMZSaDAFrNZWiDAGXNX85laIMAZc1fz2WkkAFkF4MBZaSQAWQYgwFmApABZBlkhoQBWtBl0FrRZaFlhJABZBqDAZABZBsXAIMBoLKQAWQcoQFa0mWhZYSQAWQdgwGQAWQeFwCDAaCykAFkH6EBWtNloWWEkAFkGoMBkAFkGxcAZYSQAWQdgwGQAWQeFwBCAIMBoLKQAWQgoQFa1GWhZXuQAWQhgwFl1KAIoQAXAIMBoLKQAWQioQFa1ZABZBeQAWQYZAVl1KAIoQBmBJABZCNkbYQBWtaQAWRokAFkJGSDhAFa12XAkAFkJYMBWthlwJABZCaDAVrZZchlgWVZZVyQAWQnFwCDAqCykAFkKKEBgwFcAlraWttl3GXdkAFkKaBPoQCQAWQqgwKDAVreZYSQAWQrkAFkLKBeZd6g36EAoQEXAJABZC0XAIMBoLKQAWQuoQFa4JABZC9keIQAWuFloWWEkAFkMIMBkAFkMRcAgwGgspABZDKhAVriZYSQAWQzgwGgspABZDShAVrjZYSQAWQ1gwGg5KEAoLKQAWQ2oQFa5WWEkAFkN4MBoLKQAWQ4oQFa5mWhZYSQAWQwgwGQAWQxFwBl5kIAgwGgspABZDmhAVrnZeda6GWEkAFkOoMBoLKQAWQ7oQFa6WWhZZplgWVgZOuQAWQ8jQJlnWWBkAFkPYMBZXlk64MBDwAXAGWLgwAPABcAgwEXAIMBgwGg6qEAoLKQAWQ+oQFa62WnZZ1l1KAIoQBl60IAZJyQAWQ/jQKDAaCyZFehAVrsRwCQAWRAZIuEAGSLgwJa7UcAkAFkQZABZEKEAJABZEJlaIMDWu5HAJABZENkjYQAZI1laIMDWu9HAJABZERkjIQAZIxl74MDWvBl8GrxavJq82XwavFq9GrzFwBl8GrxavVq8xcAZfBq8V/zZTeQDXKYZfZl8JABZEVl8Gr3gwMBAGX2ZfCQAWRGZfBq+IMDAQBl9mXwkAFkR2XwavmDAwEAZfZl8JABZEhl8Gr6gwMBAGX2ZfCQAWRJZfBq+4MDAQBl9mXwkAFkSmXwavGDAwEAZfZl8GrxkAFkS2XwavFq8oMDAQBl9mXwavGQAWRMZfBq8Wr1gwMBAGX2ZfBq8ZABZE1l8GrxavSDAwEAZfZl8JABZE5l8Gr8gwMBAGX2ZfCQAWRPZfBq/YMDAQBl9mXwkAFkUGXwav6DAwEARwCQAWRRkAFkUoQAkAFkUoMCWv+QAWUAkAFkU2sCkA9yAmV+kAFkVIMBkAFaAWV+kAFkVYMBkAFaAmWBZVllXJABZFYXAIMCkAFaA2WnkAFlA5ABZFdkFZABZFiNA6C4ZcWhAZABWgRlomWnkAFlBIMBgwGgspABZFmhAZABWgWQAWRakAFlBUIAkAFaBmWnkAFlA5ABZFdkFZABZFiNA6C4ZcWhAZABWgdlomWnkAFlB4MBgwGgspABZFuhAZABWgiQAWUBkAFkXIMBkAFlBpABZFmDARcAkAFlAhcAkAFlCJABZFuDARcAkAFaCZABZQmQAaAKkAFkXaEBAQBl7ZABaguQAaAKkAFkXqEBAQBl7ZABagyQAaAKkAFkXqEBAQBl7ZABag2QAaAKkAFkX6EBAQBkBGQFkAFsDpABWg5l7ZABag6guGXEkAFlDpABag+DAaEBAQBl7ZABag6QAaAKkAFkYKEBAQBkBVMAKGkBAABh1woAAApweXBhcnNpbmcgbW9kdWxlIC0gQ2xhc3NlcyBhbmQgbWV0aG9kcyB0byBkZWZpbmUgYW5kIGV4ZWN1dGUgcGFyc2luZyBncmFtbWFycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhlIHB5cGFyc2luZyBtb2R1bGUgaXMgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gY3JlYXRpbmcgYW5kCmV4ZWN1dGluZyBzaW1wbGUgZ3JhbW1hcnMsIHZzLiB0aGUgdHJhZGl0aW9uYWwgbGV4L3lhY2MgYXBwcm9hY2gsIG9yIHRoZQp1c2Ugb2YgcmVndWxhciBleHByZXNzaW9ucy4gIFdpdGggcHlwYXJzaW5nLCB5b3UgZG9uJ3QgbmVlZCB0byBsZWFybgphIG5ldyBzeW50YXggZm9yIGRlZmluaW5nIGdyYW1tYXJzIG9yIG1hdGNoaW5nIGV4cHJlc3Npb25zIC0gdGhlIHBhcnNpbmcKbW9kdWxlIHByb3ZpZGVzIGEgbGlicmFyeSBvZiBjbGFzc2VzIHRoYXQgeW91IHVzZSB0byBjb25zdHJ1Y3QgdGhlCmdyYW1tYXIgZGlyZWN0bHkgaW4gUHl0aG9uLgoKSGVyZSBpcyBhIHByb2dyYW0gdG8gcGFyc2UgIkhlbGxvLCBXb3JsZCEiIChvciBhbnkgZ3JlZXRpbmcgb2YgdGhlIGZvcm0KYGAiPHNhbHV0YXRpb24+LCA8YWRkcmVzc2VlPiEiYGApLCBidWlsdCB1cCB1c2luZyA6Y2xhc3M6YFdvcmRgLAo6Y2xhc3M6YExpdGVyYWxgLCBhbmQgOmNsYXNzOmBBbmRgIGVsZW1lbnRzCih0aGUgOmNsYXNzOmAnKyc8UGFyc2VyRWxlbWVudC5fX2FkZF9fPmAgb3BlcmF0b3JzIGNyZWF0ZSA6Y2xhc3M6YEFuZGAgZXhwcmVzc2lvbnMsCmFuZCB0aGUgc3RyaW5ncyBhcmUgYXV0by1jb252ZXJ0ZWQgdG8gOmNsYXNzOmBMaXRlcmFsYCBleHByZXNzaW9ucyk6OgoKICAgIGZyb20gcGlwLl92ZW5kb3IucHlwYXJzaW5nIGltcG9ydCBXb3JkLCBhbHBoYXMKCiAgICAjIGRlZmluZSBncmFtbWFyIG9mIGEgZ3JlZXRpbmcKICAgIGdyZWV0ID0gV29yZChhbHBoYXMpICsgIiwiICsgV29yZChhbHBoYXMpICsgIiEiCgogICAgaGVsbG8gPSAiSGVsbG8sIFdvcmxkISIKICAgIHByaW50IChoZWxsbywgIi0+IiwgZ3JlZXQucGFyc2VTdHJpbmcoaGVsbG8pKQoKVGhlIHByb2dyYW0gb3V0cHV0cyB0aGUgZm9sbG93aW5nOjoKCiAgICBIZWxsbywgV29ybGQhIC0+IFsnSGVsbG8nLCAnLCcsICdXb3JsZCcsICchJ10KClRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYW1tYXIgaXMgcXVpdGUgcmVhZGFibGUsIG93aW5nIHRvIHRoZQpzZWxmLWV4cGxhbmF0b3J5IGNsYXNzIG5hbWVzLCBhbmQgdGhlIHVzZSBvZiAnKycsICd8JyBhbmQgJ14nIG9wZXJhdG9ycy4KClRoZSA6Y2xhc3M6YFBhcnNlUmVzdWx0c2Agb2JqZWN0IHJldHVybmVkIGZyb20KOmNsYXNzOmBQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nYCBjYW4gYmUKYWNjZXNzZWQgYXMgYSBuZXN0ZWQgbGlzdCwgYSBkaWN0aW9uYXJ5LCBvciBhbiBvYmplY3Qgd2l0aCBuYW1lZAphdHRyaWJ1dGVzLgoKVGhlIHB5cGFyc2luZyBtb2R1bGUgaGFuZGxlcyBzb21lIG9mIHRoZSBwcm9ibGVtcyB0aGF0IGFyZSB0eXBpY2FsbHkKdmV4aW5nIHdoZW4gd3JpdGluZyB0ZXh0IHBhcnNlcnM6CgogIC0gZXh0cmEgb3IgbWlzc2luZyB3aGl0ZXNwYWNlICh0aGUgYWJvdmUgcHJvZ3JhbSB3aWxsIGFsc28gaGFuZGxlCiAgICAiSGVsbG8sV29ybGQhIiwgIkhlbGxvICAsICBXb3JsZCAgISIsIGV0Yy4pCiAgLSBxdW90ZWQgc3RyaW5ncwogIC0gZW1iZWRkZWQgY29tbWVudHMKCgpHZXR0aW5nIFN0YXJ0ZWQgLQotLS0tLS0tLS0tLS0tLS0tLQpWaXNpdCB0aGUgY2xhc3NlcyA6Y2xhc3M6YFBhcnNlckVsZW1lbnRgIGFuZCA6Y2xhc3M6YFBhcnNlUmVzdWx0c2AgdG8Kc2VlIHRoZSBiYXNlIGNsYXNzZXMgdGhhdCBtb3N0IG90aGVyIHB5cGFyc2luZwpjbGFzc2VzIGluaGVyaXQgZnJvbS4gVXNlIHRoZSBkb2NzdHJpbmdzIGZvciBleGFtcGxlcyBvZiBob3cgdG86CgogLSBjb25zdHJ1Y3QgbGl0ZXJhbCBtYXRjaCBleHByZXNzaW9ucyBmcm9tIDpjbGFzczpgTGl0ZXJhbGAgYW5kCiAgIDpjbGFzczpgQ2FzZWxlc3NMaXRlcmFsYCBjbGFzc2VzCiAtIGNvbnN0cnVjdCBjaGFyYWN0ZXIgd29yZC1ncm91cCBleHByZXNzaW9ucyB1c2luZyB0aGUgOmNsYXNzOmBXb3JkYAogICBjbGFzcwogLSBzZWUgaG93IHRvIGNyZWF0ZSByZXBldGl0aXZlIGV4cHJlc3Npb25zIHVzaW5nIDpjbGFzczpgWmVyb09yTW9yZWAKICAgYW5kIDpjbGFzczpgT25lT3JNb3JlYCBjbGFzc2VzCiAtIHVzZSA6Y2xhc3M6YCcrJzxBbmQ+YCwgOmNsYXNzOmAnfCc8TWF0Y2hGaXJzdD5gLCA6Y2xhc3M6YCdeJzxPcj5gLAogICBhbmQgOmNsYXNzOmAnJic8RWFjaD5gIG9wZXJhdG9ycyB0byBjb21iaW5lIHNpbXBsZSBleHByZXNzaW9ucyBpbnRvCiAgIG1vcmUgY29tcGxleCBvbmVzCiAtIGFzc29jaWF0ZSBuYW1lcyB3aXRoIHlvdXIgcGFyc2VkIHJlc3VsdHMgdXNpbmcKICAgOmNsYXNzOmBQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lYAogLSBhY2Nlc3MgdGhlIHBhcnNlZCBkYXRhLCB3aGljaCBpcyByZXR1cm5lZCBhcyBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYAogICBvYmplY3QKIC0gZmluZCBzb21lIGhlbHBmdWwgZXhwcmVzc2lvbiBzaG9ydC1jdXRzIGxpa2UgOmNsYXNzOmBkZWxpbWl0ZWRMaXN0YAogICBhbmQgOmNsYXNzOmBvbmVPZmAKIC0gZmluZCBtb3JlIHVzZWZ1bCBjb21tb24gZXhwcmVzc2lvbnMgaW4gdGhlIDpjbGFzczpgcHlwYXJzaW5nX2NvbW1vbmAKICAgbmFtZXNwYWNlIGNsYXNzCnoFMi40Ljd6FTMwIE1hciAyMDIwIDAwOjQzIFVUQ3oqUGF1bCBNY0d1aXJlIDxwdG1jZ0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+6QAAAABOKQHaA3JlZikB2ghkYXRldGltZSkB2gppdGVtZ2V0dGVyKQHaBXdyYXBzKQHaDmNvbnRleHRtYW5hZ2VyKQHaC2ZpbHRlcmZhbHNlKQHaDGlmaWx0ZXJmYWxzZSkB2gVSTG9jaykB2ghJdGVyYWJsZSkC2g5NdXRhYmxlTWFwcGluZ9oHTWFwcGluZykB2gtPcmRlcmVkRGljdCkB2g9TaW1wbGVOYW1lc3BhY2VjAAAAAAAAAAAAAAAAAQAAAEAAAABzDAAAAGUAWgFkAFoCZAFTACkCcg4AAABOKQPaCF9fbmFtZV9f2gpfX21vZHVsZV9f2gxfX3F1YWxuYW1lX1+pAHISAAAAchIAAAD6hC9idWlsZGRpci9idWlsZC9CVUlMRFJPT1QvYWx0LXB5dGhvbjM3LXBpcC0yMC4yLjQtNi5lbDgueDg2XzY0L29wdC9hbHQvcHl0aG9uMzcvbGliL3B5dGhvbjMuNy9zaXRlLXBhY2thZ2VzL3BpcC9fdmVuZG9yL3B5cGFyc2luZy5weXIOAAAAlgAAAHMCAAAACAByDgAAAGFBAgAACiAgICBBIGNyb3NzLXZlcnNpb24gY29tcGF0aWJpbGl0eSBjb25maWd1cmF0aW9uIGZvciBweXBhcnNpbmcgZmVhdHVyZXMgdGhhdCB3aWxsIGJlCiAgICByZWxlYXNlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBCeSBzZXR0aW5nIHZhbHVlcyBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gdG8gVHJ1ZSwKICAgIHRob3NlIGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIGluIHByaW9yIHZlcnNpb25zIGZvciBjb21wYXRpYmlsaXR5IGRldmVsb3BtZW50CiAgICBhbmQgdGVzdGluZy4KCiAgICAgLSBjb2xsZWN0X2FsbF9BbmRfdG9rZW5zIC0gZmxhZyB0byBlbmFibGUgZml4IGZvciBJc3N1ZSAjNjMgdGhhdCBmaXhlcyBlcnJvbmVvdXMgZ3JvdXBpbmcKICAgICAgIG9mIHJlc3VsdHMgbmFtZXMgd2hlbiBhbiBBbmQgZXhwcmVzc2lvbiBpcyBuZXN0ZWQgd2l0aGluIGFuIE9yIG9yIE1hdGNoRmlyc3Q7IHNldCB0bwogICAgICAgVHJ1ZSB0byBlbmFibGUgYnVnZml4IHJlbGVhc2VkIGluIHB5cGFyc2luZyAyLjMuMCwgb3IgRmFsc2UgdG8gcHJlc2VydmUKICAgICAgIHByZS0yLjMuMCBoYW5kbGluZyBvZiBuYW1lZCByZXN1bHRzClRhkwMAAApEaWFnbm9zdGljIGNvbmZpZ3VyYXRpb24gKGFsbCBkZWZhdWx0IHRvIEZhbHNlKQogICAgIC0gd2Fybl9tdWx0aXBsZV90b2tlbnNfaW5fbmFtZWRfYWx0ZXJuYXRpb24gLSBmbGFnIHRvIGVuYWJsZSB3YXJuaW5ncyB3aGVuIGEgcmVzdWx0cwogICAgICAgbmFtZSBpcyBkZWZpbmVkIG9uIGEgTWF0Y2hGaXJzdCBvciBPciBleHByZXNzaW9uIHdpdGggb25lIG9yIG1vcmUgQW5kIHN1YmV4cHJlc3Npb25zCiAgICAgICAob25seSB3YXJucyBpZiBfX2NvbXBhdF9fLmNvbGxlY3RfYWxsX0FuZF90b2tlbnMgaXMgRmFsc2UpCiAgICAgLSB3YXJuX3VuZ3JvdXBlZF9uYW1lZF90b2tlbnNfaW5fY29sbGVjdGlvbiAtIGZsYWcgdG8gZW5hYmxlIHdhcm5pbmdzIHdoZW4gYSByZXN1bHRzCiAgICAgICBuYW1lIGlzIGRlZmluZWQgb24gYSBjb250YWluaW5nIGV4cHJlc3Npb24gd2l0aCB1bmdyb3VwZWQgc3ViZXhwcmVzc2lvbnMgdGhhdCBhbHNvCiAgICAgICBoYXZlIHJlc3VsdHMgbmFtZXMKICAgICAtIHdhcm5fbmFtZV9zZXRfb25fZW1wdHlfRm9yd2FyZCAtIGZsYWcgdG8gZW5hYmxlIHdhcm5pbmdzIHdoYW4gYSBGb3J3YXJkIGlzIGRlZmluZWQKICAgICAgIHdpdGggYSByZXN1bHRzIG5hbWUsIGJ1dCBoYXMgbm8gY29udGVudHMgZGVmaW5lZAogICAgIC0gd2Fybl9vbl9tdWx0aXBsZV9zdHJpbmdfYXJnc190b19vbmVvZiAtIGZsYWcgdG8gZW5hYmxlIHdhcm5pbmdzIHdoYW4gb25lT2YgaXMKICAgICAgIGluY29ycmVjdGx5IGNhbGxlZCB3aXRoIG11bHRpcGxlIHN0ciBhcmd1bWVudHMKICAgICAtIGVuYWJsZV9kZWJ1Z19vbl9uYW1lZF9leHByZXNzaW9ucyAtIGZsYWcgdG8gYXV0by1lbmFibGUgZGVidWcgb24gYWxsIHN1YnNlcXVlbnQKICAgICAgIGNhbGxzIHRvIFBhcnNlckVsZW1lbnQuc2V0TmFtZSgpCkZjAQAAAAAAAAACAAAABQAAAEMAAABzJAAAAGcAfABdHH0BfAGgAGQAoQFzHHwBoABkAaEBcgR8AZECcQRTACkCWgdlbmFibGVfWgV3YXJuXykB2gpzdGFydHN3aXRoKQLaAi4w2gJubXISAAAAchIAAAByEwAAAPoKPGxpc3Rjb21wPrwAAABzAgAAAAYAchcAAABjAAAAAAAAAAAAAAAAAgAAAEMAAABzHAAAAGQBdABfAWQBdABfAmQBdABfA2QBdABfBGQAUwApAk5UKQXaCF9fZGlhZ19f2il3YXJuX211bHRpcGxlX3Rva2Vuc19pbl9uYW1lZF9hbHRlcm5hdGlvbtopd2Fybl91bmdyb3VwZWRfbmFtZWRfdG9rZW5zX2luX2NvbGxlY3Rpb27aHndhcm5fbmFtZV9zZXRfb25fZW1wdHlfRm9yd2FyZNold2Fybl9vbl9tdWx0aXBsZV9zdHJpbmdfYXJnc190b19vbmVvZnISAAAAchIAAAByEgAAAHITAAAA2hRfZW5hYmxlX2FsbF93YXJuaW5nc74AAABzCAAAAAABBgEGAQYBch0AAADaC19fdmVyc2lvbl9f2g9fX3ZlcnNpb25UaW1lX1/aCl9fYXV0aG9yX1/aCl9fY29tcGF0X19yGAAAANoDQW5k2g9DYXNlbGVzc0tleXdvcmTaD0Nhc2VsZXNzTGl0ZXJhbNoKQ2hhcnNOb3RJbtoHQ29tYmluZdoERGljdNoERWFjaNoFRW1wdHnaCkZvbGxvd2VkQnnaB0ZvcndhcmTaCkdvVG9Db2x1bW7aBUdyb3Vw2gdLZXl3b3Jk2gdMaW5lRW5k2glMaW5lU3RhcnTaB0xpdGVyYWzaClByZWNlZGVkQnnaCk1hdGNoRmlyc3TaB05vTWF0Y2jaBk5vdEFuedoJT25lT3JNb3Jl2ghPbmx5T25jZdoIT3B0aW9uYWzaAk9y2hJQYXJzZUJhc2VFeGNlcHRpb27aE1BhcnNlRWxlbWVudEVuaGFuY2XaDlBhcnNlRXhjZXB0aW9u2g9QYXJzZUV4cHJlc3Npb27aE1BhcnNlRmF0YWxFeGNlcHRpb27aDFBhcnNlUmVzdWx0c9oUUGFyc2VTeW50YXhFeGNlcHRpb27aDVBhcnNlckVsZW1lbnTaDFF1b3RlZFN0cmluZ9oZUmVjdXJzaXZlR3JhbW1hckV4Y2VwdGlvbtoFUmVnZXjaBlNraXBUb9oJU3RyaW5nRW5k2gtTdHJpbmdTdGFydNoIU3VwcHJlc3PaBVRva2Vu2g5Ub2tlbkNvbnZlcnRlctoFV2hpdGXaBFdvcmTaB1dvcmRFbmTaCVdvcmRTdGFydNoKWmVyb09yTW9yZdoEQ2hhctoJYWxwaGFudW1z2gZhbHBoYXPaCmFscGhhczhiaXTaC2FueUNsb3NlVGFn2gphbnlPcGVuVGFn2g1jU3R5bGVDb21tZW502gNjb2zaEmNvbW1hU2VwYXJhdGVkTGlzdNoQY29tbW9uSFRNTEVudGl0edoMY291bnRlZEFycmF52g9jcHBTdHlsZUNvbW1lbnTaD2RibFF1b3RlZFN0cmluZ9oPZGJsU2xhc2hDb21tZW502g1kZWxpbWl0ZWRMaXN02gZkaWN0T2baDmRvd25jYXNlVG9rZW5z2gVlbXB0edoHaGV4bnVtc9oLaHRtbENvbW1lbnTaEGphdmFTdHlsZUNvbW1lbnTaBGxpbmXaB2xpbmVFbmTaCWxpbmVTdGFydNoGbGluZW5v2gxtYWtlSFRNTFRhZ3PaC21ha2VYTUxUYWdz2g5tYXRjaE9ubHlBdENvbNoRbWF0Y2hQcmV2aW91c0V4cHLaFG1hdGNoUHJldmlvdXNMaXRlcmFs2gpuZXN0ZWRFeHBy2g9udWxsRGVidWdBY3Rpb27aBG51bXPaBW9uZU9m2gdvcEFzc29j2hJvcGVyYXRvclByZWNlZGVuY2XaCnByaW50YWJsZXPaCHB1bmM4Yml02hJweXRob25TdHlsZUNvbW1lbnTaDHF1b3RlZFN0cmluZ9oMcmVtb3ZlUXVvdGVz2hFyZXBsYWNlSFRNTEVudGl0edoLcmVwbGFjZVdpdGjaCnJlc3RPZkxpbmXaD3NnbFF1b3RlZFN0cmluZ9oGc3Jhbmdl2glzdHJpbmdFbmTaC3N0cmluZ1N0YXJ02hB0cmFjZVBhcnNlQWN0aW9u2g11bmljb2RlU3RyaW5n2gx1cGNhc2VUb2tlbnPaDXdpdGhBdHRyaWJ1dGXaDWluZGVudGVkQmxvY2vaD29yaWdpbmFsVGV4dEZvctoHdW5ncm91cNoNaW5maXhOb3RhdGlvbtoLbG9jYXRlZEV4cHLaCXdpdGhDbGFzc9oKQ2xvc2VNYXRjaNoIdG9rZW5NYXDaEHB5cGFyc2luZ19jb21tb27aEXB5cGFyc2luZ191bmljb2Rl2gt1bmljb2RlX3NldNoWY29uZGl0aW9uQXNQYXJzZUFjdGlvbtoCcmXpAwAAAGMBAAAAAAAAAAMAAAAIAAAAQwAAAHNgAAAAdAB8AHQBgwJyDnwAUwB5CHQCfACDAVMABAB0A2sKcloBAAEAAQB0AXwAgwGgBHQFoAahAGQBoQJ9AXQHZAKDAX0CfAKgCGQDZASEAKEBAQB8AqAJfAGhAVMAWABkBVMAKQZhHwEAAERyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHN0cihvYmopIHRoYXQgdHJpZXMgdG8gYmUgVW5pY29kZQogICAgICAgIGZyaWVuZGx5LiBJdCBmaXJzdCB0cmllcyBzdHIob2JqKS4gSWYgdGhhdCBmYWlscyB3aXRoCiAgICAgICAgYSBVbmljb2RlRW5jb2RlRXJyb3IsIHRoZW4gaXQgdHJpZXMgdW5pY29kZShvYmopLiBJdCB0aGVuCiAgICAgICAgPCByZXR1cm5zIHRoZSB1bmljb2RlIG9iamVjdCB8IGVuY29kZXMgaXQgd2l0aCB0aGUgZGVmYXVsdAogICAgICAgIGVuY29kaW5nIHwgLi4uID4uCiAgICAgICAg2hF4bWxjaGFycmVmcmVwbGFjZXoGJiNcZCs7YwEAAAAAAAAAAQAAAAYAAABTAAAAcyQAAABkAXQAdAF8AGQCGQBkA2QEhQIZAIMBgwFkA2QAhQIZABcAUwApBU56Alx1cgEAAADpAgAAAOn/////KQLaA2hleNoDaW50KQHaAXRyEgAAAHISAAAAchMAAADaCDxsYW1iZGE+/wAAAPMAAAAAehdfdXN0ci48bG9jYWxzPi48bGFtYmRhPk4pCtoKaXNpbnN0YW5jZdoHdW5pY29kZdoDc3Ry2hJVbmljb2RlRW5jb2RlRXJyb3LaBmVuY29kZdoDc3lz2hJnZXRkZWZhdWx0ZW5jb2RpbmdyRAAAANoOc2V0UGFyc2VBY3Rpb27aD3RyYW5zZm9ybVN0cmluZykD2gNvYmraA3JldFoKeG1sY2hhcnJlZnISAAAAchIAAAByEwAAANoFX3VzdHLsAAAAcxIAAAAABwoBBAICAwgCDgIUAQgBDgFypQAAAHo2c3VtIGxlbiBzb3J0ZWQgcmV2ZXJzZWQgbGlzdCB0dXBsZSBzZXQgYW55IGFsbCBtaW4gbWF4YwEAAAAAAAAAAgAAAAIAAABjAAAAcxIAAAB8AF0KfQF8AVYAAQBxAmQAUwApAU5yEgAAACkCchUAAADaAXlyEgAAAHISAAAAchMAAAD6CTxnZW5leHByPgwBAABzAgAAAAQAcqcAAADpAQAAAGMBAAAAAAAAAAUAAAAFAAAAQwAAAHM+AAAAZAF9AWQCZAOEAGQEoAChAEQAgwF9AngidAF8AXwCgwJEAF0UXAJ9A30EfACgAnwDfAShAn0AcSJXAHwAUwApBXovRXNjYXBlICYsIDwsID4sICIsICcsIGV0Yy4gaW4gYSBzdHJpbmcgb2YgZGF0YS56BSY+PCInYwEAAAAAAAAAAgAAAAMAAABzAAAAcxoAAAB8AF0SfQFkAHwBFwBkARcAVgABAHECZAJTACkD+gEm+gE7TnISAAAAKQJyFQAAANoBc3ISAAAAchIAAAByEwAAAHKnAAAAEwEAAHMCAAAABAB6Hl94bWxfZXNjYXBlLjxsb2NhbHM+LjxnZW5leHByPnoTYW1wIGd0IGx0IHF1b3QgYXBvcykD2gVzcGxpdNoDemlw2gdyZXBsYWNlKQXaBGRhdGHaDGZyb21fc3ltYm9sc9oKdG9fc3ltYm9sc9oFZnJvbV/aA3RvX3ISAAAAchIAAAByEwAAANoLX3htbF9lc2NhcGUOAQAAcwoAAAAABAQBEgEUARABcrQAAADaCjAxMjM0NTY3ODlaDEFCQ0RFRmFiY2RlZulcAAAA2gBjAQAAAAAAAAACAAAAAwAAAGMAAABzHAAAAHwAXRR9AXwBdABqAWsHcgJ8AVYAAQBxAmQAUwApAU4pAtoGc3RyaW5n2gp3aGl0ZXNwYWNlKQJyFQAAANoBY3ISAAAAchIAAAByEwAAAHKnAAAAHQEAAHMCAAAABABjAwAAAAAAAAAEAAAABAAAAAMAAABzQAAAAHwBZABrCXIMfAFuAmQBiQJ8AnIYdABuAnQBiQB0AogBgwGJAXQDiAGDAYcAhwGHAmYDZAJkA4QIgwF9A3wDUwApBE56HWZhaWxlZCB1c2VyLWRlZmluZWQgY29uZGl0aW9uYwMAAAAAAAAAAwAAAAUAAAATAAAAcyAAAAB0AIgBfAB8AXwCgwODAXMciAB8AHwBiAKDA4IBZABTACkBTikB2gRib29sKQNyqwAAANoBbHKXAAAAKQPaCGV4Y190eXBl2gJmbtoDbXNnchIAAAByEwAAANoCcGElAQAAcwQAAAAAAhABeiJjb25kaXRpb25Bc1BhcnNlQWN0aW9uLjxsb2NhbHM+LnBhKQRyPgAAAHI8AAAA2gtfdHJpbV9hcml0eXIFAAAAKQRyvgAAANoHbWVzc2FnZdoFZmF0YWxywAAAAHISAAAAKQNyvQAAAHK+AAAAcr8AAAByEwAAAHKPAAAAIAEAAHMKAAAAAAEQAQwBCAIYBWMAAAAAAAAAAAAAAAADAAAAQAAAAHNQAAAAZQBaAWQAWgJkAVoDZBNkBGQFhAFaBGUFZAZkB4QAgwFaBmQIZAmEAFoHZApkC4QAWghkDGQNhABaCWQUZA9kEIQBWgpkEWQShABaC2QDUwApFXI6AAAAejdiYXNlIGV4Y2VwdGlvbiBjbGFzcyBmb3IgYWxsIHBhcnNpbmcgcnVudGltZSBleGNlcHRpb25zcgEAAABOYwUAAAAAAAAABQAAAAMAAABDAAAAcz4AAAB8AnwAXwB8A2QAawhyHHwBfABfAWQBfABfAm4MfAN8AF8BfAF8AF8CfAR8AF8DfAF8AnwDZgN8AF8EZABTACkCTnK3AAAAKQXaA2xvY3K/AAAA2gRwc3Ry2g1wYXJzZXJFbGVtZW502gRhcmdzKQXaBHNlbGZyxQAAAHLEAAAAcr8AAADaBGVsZW1yEgAAAHISAAAAchMAAADaCF9faW5pdF9fMAEAAHMQAAAAAAEGAQgBBgEIAgYBBgEGAXobUGFyc2VCYXNlRXhjZXB0aW9uLl9faW5pdF9fYwIAAAAAAAAAAgAAAAUAAABDAAAAcxYAAAB8AHwBagB8AWoBfAFqAnwBagODBFMAKQF6rAogICAgICAgIGludGVybmFsIGZhY3RvcnkgbWV0aG9kIHRvIHNpbXBsaWZ5IGNyZWF0aW5nIG9uZSB0eXBlIG9mIFBhcnNlRXhjZXB0aW9uCiAgICAgICAgZnJvbSBhbm90aGVyIC0gYXZvaWRzIGhhdmluZyBfX2luaXRfXyBzaWduYXR1cmUgY29uZmxpY3RzIGFtb25nIHN1YmNsYXNzZXMKICAgICAgICApBHLFAAAAcsQAAAByvwAAAHLGAAAAKQLaA2Nsc9oCcGVyEgAAAHISAAAAchMAAADaD19mcm9tX2V4Y2VwdGlvbjsBAABzAgAAAAAGeiJQYXJzZUJhc2VFeGNlcHRpb24uX2Zyb21fZXhjZXB0aW9uYwIAAAAAAAAAAgAAAAMAAABDAAAAc04AAAB8AWQBawJyFnQAfABqAXwAagKDAlMAfAFkAmsGcix0A3wAagF8AGoCgwJTAHwBZANrAnJCdAR8AGoBfABqAoMCUwB0BXwBgwGCAWQEUwApBXr0c3VwcG9ydGVkIGF0dHJpYnV0ZXMgYnkgbmFtZSBhcmU6CiAgICAgICAgICAgLSBsaW5lbm8gLSByZXR1cm5zIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgZXhjZXB0aW9uIHRleHQKICAgICAgICAgICAtIGNvbCAtIHJldHVybnMgdGhlIGNvbHVtbiBudW1iZXIgb2YgdGhlIGV4Y2VwdGlvbiB0ZXh0CiAgICAgICAgICAgLSBsaW5lIC0gcmV0dXJucyB0aGUgbGluZSBjb250YWluaW5nIHRoZSBleGNlcHRpb24gdGV4dAogICAgICAgIHJoAAAAKQJyVwAAANoGY29sdW1ucmUAAABOKQZyaAAAAHLEAAAAcsUAAAByVwAAAHJlAAAA2g5BdHRyaWJ1dGVFcnJvcikCcsgAAADaBWFuYW1lchIAAAByEgAAAHITAAAA2gtfX2dldGF0dHJfX0MBAABzDgAAAAAGCAEOAQgBDgEIAQ4Ceh5QYXJzZUJhc2VFeGNlcHRpb24uX19nZXRhdHRyX19jAQAAAAAAAAACAAAABgAAAEMAAABzXgAAAHwAagByQHwAagF0AnwAagCDAWsFchxkAX0BcURkAnwAagB8AGoBfABqAWQDFwCFAhkAFgCgA2QEZAWhAn0BbgRkBn0BZAd8AGoEfAF8AGoBfABqBXwAagZmBRYAUwApCE56EywgZm91bmQgZW5kIG9mIHRleHR6CiwgZm91bmQgJXJyqAAAAHoCXFz6AVxytwAAAHolJXMlcyAgKGF0IGNoYXIgJWQpLCAobGluZTolZCwgY29sOiVkKSkHcsUAAAByxAAAANoDbGVucq4AAAByvwAAAHJoAAAAcs4AAAApAnLIAAAA2ghmb3VuZHN0cnISAAAAchIAAAByEwAAANoHX19zdHJfX1IBAABzDgAAAAABBgEQAQYCJAIEAQIBehpQYXJzZUJhc2VFeGNlcHRpb24uX19zdHJfX2MBAAAAAAAAAAEAAAACAAAAQwAAAHMIAAAAdAB8AIMBUwApAU4pAXKlAAAAKQFyyAAAAHISAAAAchIAAAByEwAAANoIX19yZXByX19cAQAAcwIAAAAAAXobUGFyc2VCYXNlRXhjZXB0aW9uLl9fcmVwcl9f+gM+ITxjAgAAAAAAAAAEAAAABwAAAEMAAABzPAAAAHwAagB9AnwAagFkARgAfQN8AXI0ZAKgAnwCZAN8A4UCGQB8AXwCfANkA4UCGQBmA6EBfQJ8AqADoQBTACkEeoVFeHRyYWN0cyB0aGUgZXhjZXB0aW9uIGxpbmUgZnJvbSB0aGUgaW5wdXQgc3RyaW5nLCBhbmQgbWFya3MKICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgdGhlIGV4Y2VwdGlvbiB3aXRoIGEgc3BlY2lhbCBzeW1ib2wuCiAgICAgICAgcqgAAABytwAAAE4pBHJlAAAAcs4AAADaBGpvaW7aBXN0cmlwKQRyyAAAANoMbWFya2VyU3RyaW5n2ghsaW5lX3N0ctoLbGluZV9jb2x1bW5yEgAAAHISAAAAchMAAADaDW1hcmtJbnB1dGxpbmVeAQAAcwwAAAAABAYBCgEEAQ4BEgF6IFBhcnNlQmFzZUV4Y2VwdGlvbi5tYXJrSW5wdXRsaW5lYwEAAAAAAAAAAQAAAAQAAABDAAAAcxQAAABkAaAAoQB0AXQCfACDAYMBFwBTACkCTnoPbGluZW5vIGNvbCBsaW5lKQNyrAAAANoDZGly2gR0eXBlKQFyyAAAAHISAAAAchIAAAByEwAAANoHX19kaXJfX2gBAABzAgAAAAABehpQYXJzZUJhc2VFeGNlcHRpb24uX19kaXJfXykDcgEAAABOTikBctcAAAApDHIPAAAAchAAAAByEQAAANoHX19kb2NfX3LKAAAA2gtjbGFzc21ldGhvZHLNAAAActEAAABy1QAAAHLWAAAAct0AAABy4AAAAHISAAAAchIAAAByEgAAAHITAAAAcjoAAAAsAQAAcxAAAAAIAQQDCgsMCAgPCAoIAgoKYwAAAAAAAAAAAAAAAAQAAABAAAAAcx4AAABlAFoBZABaAmQBWgNlBGQGZANkBIQBgwFaBWQFUwApB3I8AAAAYToCAAAKICAgIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBwYXJzZSBleHByZXNzaW9ucyBkb24ndCBtYXRjaCBjbGFzczsKICAgIHN1cHBvcnRlZCBhdHRyaWJ1dGVzIGJ5IG5hbWUgYXJlOgogICAgLSBsaW5lbm8gLSByZXR1cm5zIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgZXhjZXB0aW9uIHRleHQKICAgIC0gY29sIC0gcmV0dXJucyB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgZXhjZXB0aW9uIHRleHQKICAgIC0gbGluZSAtIHJldHVybnMgdGhlIGxpbmUgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uIHRleHQKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBXb3JkKG51bXMpLnNldE5hbWUoImludGVnZXIiKS5wYXJzZVN0cmluZygiQUJDIikKICAgICAgICBleGNlcHQgUGFyc2VFeGNlcHRpb24gYXMgcGU6CiAgICAgICAgICAgIHByaW50KHBlKQogICAgICAgICAgICBwcmludCgiY29sdW1uOiB7fSIuZm9ybWF0KHBlLmNvbCkpCgogICAgcHJpbnRzOjoKCiAgICAgICBFeHBlY3RlZCBpbnRlZ2VyIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKICAgICAgICBjb2x1bW46IDEKCiAgICDpEAAAAGMCAAAAAAAAAAwAAAAIAAAAQwAAAHNwAQAAZAFkAmwAfQJ8AWQCawhyGHQBoAKhAH0BZwB9A3QDfAB0BIMCckp8A6AFfABqBqEBAQB8A6AFZAN8AGoHZAQYABQAZAUXAKEBAQB8A6AFZAagCHQJfACDAWoKfAChAqEBAQB8AWQBawSQAXJmfAJqC3wAagx8AWQHjQJ9BHQNgwB9BXjidA58BHwBCwBkAoUCGQCDAUQAXcxcAn0GfQd8B2QBGQB9CHwIag+gEGQIZAKhAn0JdAN8CXQRgwKQAXIEfAhqEmoTZAlrB3LOcZZ8CXwFawZy2HGWfAWgFHwJoQEBAHQJfAmDAX0KfAOgBWQKoAh8CmoVfApqCnwJoQOhAQEAblB8CWQCawmQAXIudAl8CYMBfQp8A6AFZAugCHwKahV8CmoKoQKhAQEAbiZ8CGoSfQt8C2oTZAxrBpABckJxlnwDoAVkDaAIfAtqE6EBoQEBAHwBZAQ4AH0BfAFzllAAcZZXAGQOoBZ8A6EBUwApD2FwBAAACiAgICAgICAgTWV0aG9kIHRvIHRha2UgYW4gZXhjZXB0aW9uIGFuZCB0cmFuc2xhdGUgdGhlIFB5dGhvbiBpbnRlcm5hbCB0cmFjZWJhY2sgaW50byBhIGxpc3QKICAgICAgICBvZiB0aGUgcHlwYXJzaW5nIGV4cHJlc3Npb25zIHRoYXQgY2F1c2VkIHRoZSBleGNlcHRpb24gdG8gYmUgcmFpc2VkLgoKICAgICAgICBQYXJhbWV0ZXJzOgoKICAgICAgICAgLSBleGMgLSBleGNlcHRpb24gcmFpc2VkIGR1cmluZyBwYXJzaW5nIChuZWVkIG5vdCBiZSBhIFBhcnNlRXhjZXB0aW9uLCBpbiBzdXBwb3J0CiAgICAgICAgICAgb2YgUHl0aG9uIGV4Y2VwdGlvbnMgdGhhdCBtaWdodCBiZSByYWlzZWQgaW4gYSBwYXJzZSBhY3Rpb24pCiAgICAgICAgIC0gZGVwdGggKGRlZmF1bHQ9MTYpIC0gbnVtYmVyIG9mIGxldmVscyBiYWNrIGluIHRoZSBzdGFjayB0cmFjZSB0byBsaXN0IGV4cHJlc3Npb24KICAgICAgICAgICBhbmQgZnVuY3Rpb24gbmFtZXM7IGlmIE5vbmUsIHRoZSBmdWxsIHN0YWNrIHRyYWNlIG5hbWVzIHdpbGwgYmUgbGlzdGVkOyBpZiAwLCBvbmx5CiAgICAgICAgICAgdGhlIGZhaWxpbmcgaW5wdXQgbGluZSwgbWFya2VyLCBhbmQgZXhjZXB0aW9uIHN0cmluZyB3aWxsIGJlIHNob3duCgogICAgICAgIFJldHVybnMgYSBtdWx0aS1saW5lIHN0cmluZyBsaXN0aW5nIHRoZSBQYXJzZXJFbGVtZW50cyBhbmQvb3IgZnVuY3Rpb24gbmFtZXMgaW4gdGhlCiAgICAgICAgZXhjZXB0aW9uJ3Mgc3RhY2sgdHJhY2UuCgogICAgICAgIE5vdGU6IHRoZSBkaWFnbm9zdGljIG91dHB1dCB3aWxsIGluY2x1ZGUgc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgZXhwcmVzc2lvbnMKICAgICAgICB0aGF0IGZhaWxlZCB0byBwYXJzZS4gVGhlc2UgcmVwcmVzZW50YXRpb25zIHdpbGwgYmUgbW9yZSBoZWxwZnVsIGlmIHlvdSB1c2UgYHNldE5hbWVgIHRvCiAgICAgICAgZ2l2ZSBpZGVudGlmaWFibGUgbmFtZXMgdG8geW91ciBleHByZXNzaW9ucy4gT3RoZXJ3aXNlIHRoZXkgd2lsbCB1c2UgdGhlIGRlZmF1bHQgc3RyaW5nCiAgICAgICAgZm9ybXMsIHdoaWNoIG1heSBiZSBjcnlwdGljIHRvIHJlYWQuCgogICAgICAgIGV4cGxhaW4oKSBpcyBvbmx5IHN1cHBv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ICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikKCiAgICAgICAgZGVmIHRlc3QocywgZm49cmVwcik6CiAgICAgICAgICAgIHByaW50KCIlcyAtPiAlcyIgJSAocywgZm4oZXZhbChzKSkpKQogICAgICAgIHRlc3QoImxpc3QocmVzdWx0KSIpCiAgICAgICAgdGVzdCgicmVzdWx0WzBdIikKICAgICAgICB0ZXN0KCJyZXN1bHRbJ21vbnRoJ10iKQogICAgICAgIHRlc3QoInJlc3VsdC5kYXkiKQogICAgICAgIHRlc3QoIidtb250aCcgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCInbWludXRlcycgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCJyZXN1bHQuZHVtcCgpIiwgc3RyKQoKICAgIHByaW50czo6CgogICAgICAgIGxpc3QocmVzdWx0KSAtPiBbJzE5OTknLCAnLycsICcxMicsICcvJywgJzMxJ10KICAgICAgICByZXN1bHRbMF0gLT4gJzE5OTknCiAgICAgICAgcmVzdWx0Wydtb250aCddIC0+ICcxMicKICAgICAgICByZXN1bHQuZGF5IC0+ICczMScKICAgICAgICAnbW9udGgnIGluIHJlc3VsdCAtPiBUcnVlCiAgICAgICAgJ21pbnV0ZXMnIGluIHJlc3VsdCAtPiBGYWxzZQogICAgICAgIHJlc3VsdC5kdW1wKCkgLT4gWycxOTk5JywgJy8nLCAnMTInLCAnLycsICczMSddCiAgICAgICAgLSBkYXk6IDMxCiAgICAgICAgLSBtb250aDogMTIKICAgICAgICAtIHllYXI6IDE5OTkKICAgIE5UYwUAAAAAAAAABgAAAAMAAABDAAAAcyIAAAB0AHwBfACDAnIOfAFTAHQBoAJ8AKEBfQVkAXwFXwN8BVMAKQJOVCkEcpoAAADaBm9iamVjdNoHX19uZXdfX9oVX1BhcnNlUmVzdWx0c19fZG9pbml0KQZyywAAANoHdG9rbGlzdNoEbmFtZdoGYXNMaXN02gVtb2RhbNoGcmV0b2JqchIAAAByEgAAAHITAAAAcg4BAAAhAgAAcwoAAAAAAQoBBAEKAQYBehRQYXJz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c3RgYCkuCiAgICAgICAgU3VwcG9ydHMgYm90aCBgYGxpc3RgYCBhbmQgYGBkaWN0YGAgc2VtYW50aWNzIGZvciBgYHBvcCgpYGAuIElmCiAgICAgICAgcGFzc2VkIG5vIGFyZ3VtZW50IG9yIGFuIGludGVnZXIgYXJndW1lbnQsIGl0IHdpbGwgdXNlIGBgbGlzdGBgCiAgICAgICAgc2VtYW50aWNzIGFuZCBwb3AgdG9rZW5zIGZyb20gdGhlIGxpc3Qgb2YgcGFyc2VkIHRva2Vucy4gSWYgcGFzc2VkCiAgICAgICAgYSBub24taW50ZWdlciBhcmd1bWVudCAobW9zdCBsaWtlbHkgYSBzdHJpbmcpLCBpdCB3aWxsIHVzZSBgYGRpY3RgYAogICAgICAgIHNlbWFudGljcyBhbmQgcG9wIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGZyb20gYW55IGRlZmluZWQgcmVzdWx0cwogICAgICAgIG5hbWVzLiBBIHNlY29uZCBkZWZhdWx0IHJldHVybiB2YWx1ZSBhcmd1bWVudCBpcyBzdXBwb3J0ZWQsIGp1c3QgYXMgaW4KICAgICAgICBgYGRpY3QucG9wKClgYC4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBkZWYgcmVtb3ZlX2ZpcnN0KHRva2Vucyk6CiAgICAgICAgICAgICAgICB0b2tlbnMucG9wKDApCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShXb3JkKG51bXMpKS5wYXJzZVN0cmluZygiMCAxMjMgMzIxIikpICMgLT4gWycwJywgJzEyMycsICczMjEnXQogICAgICAgICAgICBwcmludChPbmVPck1vcmUoV29yZChudW1zKSkuYWRkUGFyc2VBY3Rpb24ocmVtb3ZlX2ZpcnN0KS5wYXJzZVN0cmluZygiMCAxMjMgMzIxIikpICMgLT4gWycxMjMnLCAnMzIxJ10KCiAgICAgICAgICAgIGxhYmVsID0gV29yZChhbHBoYXMpCiAgICAgICAgICAgIHBhdHQgPSBsYWJlbCgiTEFCRUwiKSArIE9uZU9yTW9yZShXb3JkKG51bXMpKQogICAgICAgICAgICBwcmludChwYXR0LnBhcnNlU3RyaW5nKCJBQUIgMTIzIDMyMSIpLmR1bXAoKSkKCiAgICAgICAgICAgICMgVXNlIHBvcCgpIGluIGEgcGFyc2UgYWN0aW9uIHRvIHJlbW92ZSBuYW1lZCByZXN1bHQgKG5vdGUgdGhhdCBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIG5vdAogICAgICAgICAgICAjIHJlbW92ZWQgZnJvbSBsaXN0IGZvcm0gb2YgcmVzdWx0cykKICAgICAgICAgICAgZGVmIHJlbW92ZV9MQUJFTCh0b2tlbnMpOgogICAgICAgICAgICAgICAgdG9rZW5zLnBvcCgiTEFCRUwiKQogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VucwogICAgICAgICAgICBwYXR0LmFkZFBhcnNlQWN0aW9uKHJlbW92ZV9MQUJFTCkKICAgICAgICAgICAgcHJpbnQocGF0dC5wYXJzZVN0cmluZygiQUFCIDEyMyAzMjEiKS5kdW1wKCkpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBbJ0FBQicsICcxMjMnLCAnMzIxJ10KICAgICAgICAgICAgLSBMQUJFTDogQUFCCgogICAgICAgICAgICBbJ0FBQicsICcxMjMnLCAnMzIxJ10KICAgICAgICBylAAAANoHZGVmYXVsdHIBAAAAei1wb3AoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICclcydyqAAAAE4pBXIsAQAAciEBAABymgAAAHKWAAAActMAAAApCHLIAAAAcscAAADaBmt3YXJnc3ImAQAAciMBAADaBWluZGV4cqQAAADaDGRlZmF1bHR2YWx1ZXISAAAAchIAAAByEwAAANoDcG9wvQIAAHMeAAAAACUEAQYBEgEIAQ4CEAEOAQwBDAEIAQgBBgEEAggBehBQYXJzZVJlc3VsdHMucG9wYwMAAAAAAAAAAwAAAAIAAABDAAAAcxgAAAB8AXwAawZyEHwAfAEZAFMAfAJTAGQBUwApAmFbAgAACiAgICAgICAgUmV0dXJucyBuYW1lZCByZXN1bHQgbWF0Y2hpbmcgdGhlIGdpdmVuIGtleSwgb3IgaWYgdGhlcmUgaXMgbm8KICAgICAgICBzdWNoIG5hbWUsIHRoZW4gcmV0dXJucyB0aGUgZ2l2ZW4gYGBkZWZhdWx0VmFsdWVgYCBvciBgYE5vbmVgYCBpZiBubwogICAgICAgIGBgZGVmYXVsdFZhbHVlYGAgaXMgc3BlY2lmaWVkLgoKICAgICAgICBTaW1pbGFyIHRvIGBgZGljdC5nZXQoKWBgLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCgogICAgICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpCiAgICAgICAgICAgIHByaW50KHJlc3VsdC5nZXQoInllYXIiKSkgIyAtPiAnMTk5OScKICAgICAgICAgICAgcHJpbnQocmVzdWx0LmdldCgiaG91ciIsICJub3Qgc3BlY2lmaWVkIikpICMgLT4gJ25vdCBzcGVjaWZpZWQnCiAgICAgICAgICAgIHByaW50KHJlc3VsdC5nZXQoImhvdXIiKSkgIyAtPiBOb25lCiAgICAgICAgTnISAAAAKQNyyAAAANoDa2V52gxkZWZhdWx0VmFsdWVyEgAAAHISAAAAchMAAABy9AAAAPQCAABzBgAAAAASCAEIAnoQUGFyc2VSZXN1bHRzLmdldGMDAAAAAAAAAAgAAAAHAAAAQwAAAHNaAAAAfABqAKABfAF8AqECAQB4RnwAagKgA6EARABdOFwCfQN9BHgudAR8BIMBRABdIlwCfQVcAn0GfQd0BXwGfAd8B3wBawQXAIMCfAR8BTwAcSxXAHEaVwBkAVMAKQJhGQIAAAogICAgICAgIEluc2VydHMgbmV3IGVsZW1lbnQgYXQgbG9jYXRpb24gaW5kZXggaW4gdGhlIGxpc3Qgb2YgcGFyc2VkIHRva2Vucy4KCiAgICAgICAgU2ltaWxhciB0byBgYGxpc3QuaW5zZXJ0KClgYC4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBwcmludChPbmVPck1vcmUoV29yZChudW1zKSkucGFyc2VTdHJpbmcoIjAgMTIz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cm5zIHRoZSByZXN1bHRzIG5hbWUgZm9yIHRoaXMgdG9rZW4gZXhwcmVzc2lvbi4gVXNlZnVsIHdoZW4gc2V2ZXJhbAogICAgICAgIGRpZmZlcmVudCBleHByZXNzaW9ucyBtaWdodCBtYXRjaCBhdCBhIHBhcnRpY3VsYXIgbG9jYXRpb24uCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICAgICAgc3NuX2V4cHIgPSBSZWdleChyIlxkXGRcZC1cZFxkLVxkXGRcZFxkIikKICAgICAgICAgICAgaG91c2VfbnVtYmVyX2V4cHIgPSBTdXBwcmVzcygnIycpICsgV29yZChudW1zLCBhbHBoYW51bXMpCiAgICAgICAgICAgIHVzZXJfZGF0YSA9IChHcm91cChob3VzZV9udW1iZXJfZXhwcikoImhvdXNlX251bWJlciIpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgR3JvdXAoc3NuX2V4cHIpKCJzc24iKQogICAgICAgICAgICAgICAgICAgICAgICB8IEdyb3VwKGludGVnZXIpKCJhZ2UiKSkKICAgICAgICAgICAgdXNlcl9pbmZvID0gT25lT3JNb3JlKHVzZXJfZGF0YSkKCiAgICAgICAgICAgIHJlc3VsdCA9IHVzZXJfaW5mby5wYXJzZVN0cmluZygiMjIgMTExLTIyLTMzMzMgIzIyMUIiKQogICAgICAgICAgICBmb3IgaXRlbSBpbiByZXN1bHQ6CiAgICAgICAgICAgICAgICBwcmludChpdGVtLmdldE5hbWUoKSwgJzonLCBpdGVtWzBdKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgYWdlIDogMjIKICAgICAgICAgICAgc3NuIDogMTExLTIyLTMzMzMKICAgICAgICAgICAgaG91c2VfbnVtYmVyIDogMjIxQgogICAgICAgIE5yqAAAAHIBAAAAKQJyAQAAAHKUAAAAKQlyFQEAAHIWAQAA2hVfUGFyc2VSZXN1bHRzX19sb29rdXBy0wAAAHIeAQAA2gRuZXh0cjcBAAByQQEAAHI/AQAAKQJyyAAAANoDcGFychIAAAByEgAAAHITAAAA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bnQgPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcHJpbnQuaHRtbD5gXyBtb2R1bGUuCiAgICAgICAgQWNjZXB0cyBhZGRpdGlvbmFsIHBvc2l0aW9uYWwgb3Iga2V5d29yZCBhcmdzIGFzIGRlZmluZWQgZm9yCiAgICAgICAgYHBwcmludC5wcHJpbnQgPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQucHByaW50PmBfIC4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBpZGVudCA9IFdvcmQoYWxwaGFzLCBhbHBoYW51bXMpCiAgICAgICAgICAgIG51bSA9IFdvcmQobnVtcykKICAgICAgICAgICAgZnVuYyA9IEZvcndhcmQoKQogICAgICAgICAgICB0ZXJtID0gaWRlbnQgfCBudW0gfCBHcm91cCgnKCcgKyBmdW5jICsgJyknKQogICAgICAgICAgICBmdW5jIDw8PSBpZGVudCArIEdyb3VwKE9wdGlvbmFsKGRlbGltaXRlZExpc3QodGVybSkpKQogICAgICAgICAgICByZXN1bHQgPSBmdW5jLnBhcnNlU3RyaW5nKCJmbmEgYSxiLChmbmIgYyxkLDIwMCksMTAwIikKICAgICAgICAgICAgcmVzdWx0LnBwcmludCh3aWR0aD00MCkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIFsnZm5hJywKICAgICAgICAgICAgIFsnYScsCiAgICAgICAgICAgICAgJ2InLAogICAgICAgICAgICAgIFsnKCcsICdmbmInLCBbJ2MnLCAnZCcsICcyMDAnXSwgJyknXSwKICAgICAgICAgICAgICAnMTAwJ11dCiAgICAgICAgTikC2gZwcHJpbnRyEgEAACkDcsgAAAByxwAAAHJFAQAAchIAAAByEgAAAHITAAAAcoIBAABqBAAAcwIAAAAAGXoTUGFyc2VSZXN1bHRzLnBwcmludGMBAAAAAAAAAAEAAAAFAAAAQwAAAHMuAAAAfABqAHwAagGgAqEAfABqA2QAawlyHnwAoAOhAHAgZAB8AGoEfABqBWYEZgJTACkBTikGchsBAAByHgEAAHJS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ICAgICAgICAgICAgV29yZChudW1zKS5wYXJzZVN0cmluZygiQUJDIikgICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCBXOigwMTIzLi4uKSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCiAgICAgICAgICAgIFdvcmQobnVtcykuc2V0TmFtZSgiaW50ZWdlciIpLnBhcnNlU3RyaW5nKCJBQkMiKSAgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkIGludGVnZXIgKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQogICAgICAgIHoJRXhwZWN0ZWQgKQVyEQEAAHLJAQAAchgAAADaIWVuYWJsZV9kZWJ1Z19vbl9uYW1lZF9leHByZXNzaW9uc9oIc2V0RGVidWcpAnLIAAAAchEBAAByEgAAAHISAAAAchMAAADaB3NldE5hbWWsBQAAcwoAAAAACQYBDAEGAQgBehVQYXJzZXJFbGVtZW50LnNldE5hbWVjAwAAAAAAAAADAAAABAAAAEMAAABzDAAAAHwAoAB8AXwCoQJTACkBYU8DAAAKICAgICAgICBEZWZpbmUgbmFtZSBmb3IgcmVmZXJlbmNpbmcgbWF0Y2hpbmcgdG9rZW5zIGFzIGEgbmVzdGVkIGF0dHJpYnV0ZQogICAgICAgIG9mIHRoZSByZXR1cm5lZCBwYXJzZSByZXN1bHRzLgogICAgICAgIE5PVEU6IHRoaXMgcmV0dXJucyBhICpjb3B5KiBvZiB0aGUgb3JpZ2luYWwgOmNsYXNzOmBQYXJzZXJFbGVtZW50YCBvYmplY3Q7CiAgICAgICAgdGhpcyBpcyBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGRlZmluZSBhIGJhc2ljIGVsZW1lbnQsIHN1Y2ggYXMgYW4KICAgICAgICBpbnRlZ2VyLCBhbmQgcmVmZXJlbmNlIGl0IGluIG11bHRpcGxlIHBsYWNlcyB3aXRoIGRpZmZlcmVudCBuYW1lcy4KCiAgICAgICAgWW91IGNhbiBhbHNvIHNldCByZXN1bHRzIG5hbWVzIHVzaW5nIHRoZSBhYmJyZXZpYXRlZCBzeW50YXgsCiAgICAgICAgYGBleHByKCJuYW1lIilgYCBpbiBwbGFjZSBvZiBgYGV4cHIuc2V0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ICAgIC0gbG9jID0gdGhlIGxvY2F0aW9uIG9mIHRoZSBtYXRjaGluZyBzdWJzdHJpbmcKICAgICAgICAtIHRva3MgPSBhIGxpc3Qgb2YgdGhlIG1hdGNoZWQgdG9rZW5zLCBwYWNrYWdlZCBhcyBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBvYmplY3QKCiAgICAgICAgSWYgdGhlIGZ1bmN0aW9ucyBpbiBmbnMgbW9kaWZ5IHRoZSB0b2tlbnMsIHRoZXkgY2FuIHJldHVybiB0aGVtIGFzIHRoZSByZXR1cm4KICAgICAgICB2YWx1ZSBmcm9tIGZuLCBhbmQgdGhlIG1vZGlmaWVkIGxpc3Qgb2YgdG9rZW5zIHdpbGwgcmVwbGFjZSB0aGUgb3JpZ2luYWwuCiAgICAgICAgT3RoZXJ3aXNlLCBmbiBkb2VzIG5vdCBuZWVkIHRvIHJldHVybiBhbnkgdmFsdWUuCgogICAgICAgIElmIE5vbmUgaXMgcGFzc2VkIGFzIHRoZSBwYXJzZSBhY3Rpb24sIGFsbCBwcmV2aW91c2x5IGFkZGVkIHBhcnNlIGFjdGlvbnMgZm9yIHRoaXMKICAgICAgICBleHByZXNzaW9uIGFyZSBjbGVhcmVkLgoKICAgICAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50czoKICAgICAgICAtIGNhbGxEdXJpbmdUcnkgPSAoZGVmYXVsdD0gYGBGYWxzZWBgKSBpbmRpY2F0ZSBpZiBwYXJzZSBhY3Rpb24gc2hvdWxkIGJlIHJ1biBkdXJpbmcgbG9va2FoZWFkcyBhbmQgYWx0ZXJuYXRlIHRlc3RpbmcKCiAgICAgICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2luZyBiZWhhdmlvciBpcyB0byBleHBhbmQgdGFicyBpbiB0aGUgaW5wdXQgc3RyaW5nCiAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUgOmNsYXNzOmBwYXJzZVN0cmluZyBmb3IgbW9yZQogICAgICAgIGluZm9ybWF0aW9uIG9uIHBhcnNpbmcgc3RyaW5ncyBjb250YWluaW5nIGBgPFRBQj5gYCBzLCBhbmQgc3VnZ2VzdGVkCiAgICAgICAg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gwNkA2sJcrJ8AKAOfAdqD6EBfAdfD3wHggFXAGQDZAN9B34HWABZAG4GWAB8BVMAZANTACkEYfsFAAAKICAgICAgICBFeGVjdXRlIHRoZSBwYXJzZSBleHByZXNzaW9uIHdpdGggdGhlIGdpdmVuIHN0cmluZy4KICAgICAgICBUaGlzIGlzIHRoZSBtYWluIGludGVyZmFjZSB0byB0aGUgY2xpZW50IGNvZGUsIG9uY2UgdGhlIGNvbXBsZXRlCiAgICAgICAgZXhwcmVzc2lvbiBoYXMgYmVlbiBidWlsdC4KCiAgICAgICAgUmV0dXJucyB0aGUgcGFyc2VkIGRhdGEgYXMgYSA6Y2xhc3M6YFBhcnNlUmVzdWx0c2Agb2JqZWN0LCB3aGljaCBtYXkgYmUKICAgICAgICBhY2Nlc3NlZCBhcyBhIGxpc3QsIG9yIGFzIGEgZGljdCBvciBvYmplY3Qgd2l0aCBhdHRyaWJ1dGVzIGlmIHRoZSBnaXZlbiBwYXJzZXIKICAgICAgICBpbmNsdWRlcyByZXN1bHRzIG5hbWVzLgoKICAgICAgICBJZiB5b3Ugd2FudCB0aGUgZ3JhbW1hciB0byByZXF1aXJlIHRoYXQgdGhlIGVudGlyZSBpbnB1dCBzdHJpbmcgYmUKICAgICAgICBzdWNjZXNzZnVsbHkgcGFyc2VkLCB0aGVuIHNldCBgYHBhcnNlQWxsYGAgdG8gVHJ1ZSAoZXF1aXZhbGVudCB0byBlbmRpbmcKICAgICAgICB0aGUgZ3JhbW1hciB3aXRoIGBgU3RyaW5nRW5kKClgYCkuCgogICAgICAgIE5vdGU6IGBgcGFyc2VTdHJpbmdgYCBpbXBsaWNpdGx5IGNhbGxzIGBgZXhwYW5kdGFicygpYGAgb24gdGhlIGlucHV0IHN0cmluZywKICAgICAgICBpbiBvcmRlciB0byByZXBvcnQgcHJvcGVyIGNvbHVtbiBudW1iZXJzIGluIHBhcnNlIGFjdGlvbnMuCiAgICAgICAgSWYgdGhlIGlucHV0IHN0cmluZyBjb250YWlucyB0YWJzIGFuZAogICAgICAgIHRoZSBncmFtbWFyIHVzZXMgcGFyc2UgYWN0aW9ucyB0aGF0IHVzZSB0aGUgYGBsb2NgYCBhcmd1bWVudCB0byBp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cnNlU3RyaW5nYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYXJzaW5nCiAgICAgICAgc3RyaW5ncyB3aXRoIGVtYmVkZGVkIHRhYnMuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgc291cmNlID0gInNsZGpmMTIzbHNkamprZjM0NXNsZGtqZjg3OWxranNmZDk4NyIKICAgICAgICAgICAgcHJpbnQoc291cmNlKQogICAgICAgICAgICBmb3IgdG9rZW5zLCBzdGFydCwgZW5kIGluIFdvcmQoYWxwaGFzKS5zY2FuU3RyaW5nKHNvdXJjZSk6CiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyAnXicqKGVuZC1zdGFydCkpCiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyB0b2tlbnNbMF0pCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODcKICAgICAgICAgICAgXl5eXl4KICAgICAgICAgICAgc2xkamYKICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgbHNkamprZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xka2pmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsa2pzZmQKICAgICAgICByAQAAAEYpAXLcAQAAcqgAAABy8AAAAE4pEXLHAQAAchoCAAByxQEAAHLEAQAAcqUAAAByGwIAAHLTAAAAcvABAABy4AEAAHJBAAAAchUCAAByPAAAAHI6AAAAchwCAABysAEAAHK6AQAAcvAAAAApD3LIAAAAcpQBAADaCm1heE1hdGNoZXPaB292ZXJsYXBy6wEAAHLvAQAAcsQAAADaCnByZXBhcnNlRm7aB3BhcnNlRm7aB21hdGNoZXNy+AEAANoHbmV4dExvY3L6AQAA2gduZXh0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A18HfAOCAVcAZARkBH0DfgNYAFkAbgJYAGQEUwApBWGgAwAACiAgICAgICAgQW5vdGhlciBleHRlbnNpb24gdG8gOmNsYXNzOmBzY2FuU3RyaW5nYCwgc2ltcGxpZnlpbmcgdGhlIGFjY2VzcyB0byB0aGUgdG9rZW5zIGZvdW5kCiAgICAgICAgdG8gbWF0Y2ggdGhlIGdpdmVuIHBhcnNlIGV4cHJlc3Npb24uICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwKICAgICAgICBgYG1heE1hdGNoZXNgYCBhcmd1bWVudCwgdG8gY2xpcCBzZWFyY2hpbmcgYWZ0ZXIgJ24nIG1hdGNoZXMgYXJlIGZvdW5kLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgICMgYSBjYXBpdGFsaXplZCB3b3JkIHN0YXJ0cyB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBsb3dlcmNhc2UgbGV0dGVycwogICAgICAgICAgICBjYXBfd29yZCA9IFdvcmQoYWxwaGFzLnVwcGVyKCksIGFscGhhcy5sb3dlcigpKQoKICAgICAgICAgICAgcHJpbnQoY2FwX3dvcmQuc2VhcmNoU3RyaW5nKCJNb3JlIHRoYW4gSXJvbiwgbW9yZSB0aGFuIExlYWQsIG1vcmUgdGhhbiBHb2xkIEkgbmVlZCBFbGVjdHJpY2l0eSIpKQoKICAgICAgICAgICAgIyB0aGUgc3VtKCkgYnVpbHRpbiBjYW4gYmUgdXNlZCB0byBtZXJnZSByZXN1bHRzIGludG8gYSBzaW5nbGUgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgICAgICBwcmludChzdW0oY2FwX3dvcmQuc2VhcmNoU3RyaW5nKCJNb3JlIHRoYW4gSXJvbiwgbW9yZSB0aGFuIExlYWQsIG1vcmUgdGhhbiBHb2xkIEkgbmVlZCBFbGVjdHJpY2l0eSIpKSkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIFtbJ01vcmUnXSwgWydJcm9uJ10sIFsnTGVhZCddLCBbJ0dvbGQnXSwgWydJJ10sIFsnRWxlY3RyaWNpdHknXV0KICAgICAgICAg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eSBhbHNvIGluY2x1ZGUgYGBOb25lYGAgYXMgaW46CiAgICAgICAgIC0gYGBleHByKihuLCBOb25lKWBgIG9yIGBgZXhwcioobiwgKWBgIGlzIGVxdWl2YWxlbnQKICAgICAgICAgICAgICB0byBgYGV4cHIqbiArIFplcm9Pck1vcmUoZXhwcilgYAogICAgICAgICAgICAgIChyZWFkIGFzICJhdCBsZWFzdCBuIGluc3RhbmNlcyBvZiBgYGV4cHJgYCIpCiAgICAgICAgIC0gYGBleHByKihOb25lLCBuKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBleHByKigwLCBuKWBgCiAgICAgICAgICAgICAgKHJlYWQgYXMgIjAgdG8gbiBpbnN0YW5jZXMgb2YgYGBleHByYGAiKQogICAgICAgICAtIGBgZXhwciooTm9uZSwgTm9uZSlgYCBpcyBlcXVpdmFsZW50IHRvIGBgWmVyb09yTW9yZShleHByKWBgCiAgICAgICAgIC0gYGBleHByKigxLCBOb25lKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBPbmVPck1vcmUoZXhwcilgYAoKICAgICAgICBOb3RlIHRoYXQgYGBleHByKihOb25lLCBuKWBgIGRvZXMgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZgogICAgICAgIG1vcmUgdGhhbiBuIGV4cHJzIGV4aXN0IGluIHRoZSBpbnB1dCBzdHJlYW07IHRoYXQgaXMsCiAgICAgICAgYGBleHByKihOb25lLCBuKWBgIGRvZXMgbm90IGVuZm9yY2UgYSBtYXhpbXVtIG51bWJlciBvZiBleHByCiAgICAgICAgb2NjdXJyZW5jZXMuICBJZiB0aGlzIGJlaGF2aW9yIGlzIGRlc2lyZWQsIHRoZW4gd3JpdGUKICAgICAgICBgYGV4cHIqKE5vbmUsIG4pICsgfmV4cHJgYAogICAgICAgICkCcgEAAABOTnKoAAAAKQFyAQAAACkBTnKTAAAAcgEAAABjAQAAAAAAAAACAAAAAwAAAHMAAABzHgAAAHwAXRZ9AXwBdABrCXISfAFuAmQAVgABAHECZABTACkBTikBcjECAAApAnIVAAAAcigCAAByEgAAAHISAAAAchMAAABypwAAAMMIAABzAgAA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BHwBgwFkAWsEcnp0BaAGZAKgB3wBZANkBIUCGQB0BHwBgwFkBGsEcnJkBaAHdAR8AYMBoQFuAmQGoQKhAQEAfAB0CHwBZANkAYUCGQCDARQAfQJ8AlMAKQdhggMAAAogICAgICAgIHVzZSBgYFtdYGAgaW5kZXhpbmcgbm90YXRpb24gYXMgYSBzaG9ydCBmb3JtIGZvciBleHByZXNzaW9uIHJlcGV0aXRpb246CiAgICAgICAgIC0gYGBleHByW25dYGAgaXMgZXF1aXZhbGVudCB0byBgYGV4cHIqbmBgCiAgICAgICAgIC0gYGBleHByW20sIG5dYGAgaXMgZXF1aXZhbGVudCB0byBgYGV4cHIqKG0sIG4pYGAKICAgICAgICAgLSBgYGV4cHJbbiwgLi4uXWBgIG9yIGBgZXhwcltuLF1gYCBpcyBlcXVpdmFsZW50CiAgICAgICAgICAgICAgdG8gYGBleHByKm4gKyBaZXJvT3JNb3JlKGV4cHIpYGAKICAgICAgICAgICAgICAocmVhZCBhcyAiYXQgbGVhc3QgbiBpbnN0YW5jZXMgb2YgYGBleHByYGAiKQogICAgICAgICAtIGBgZXhwclsuLi4sIG5dYGAgaXMgZXF1aXZhbGVudCB0byBgYGV4cHIqKDAsIG4pYGAKICAgICAgICAgICAgICAocmVhZCBhcyAiMCB0byBuIGluc3RhbmNlcyBvZiBgYGV4cHJgYCIpCiAgICAgICAgIC0gYGBleHByWy4uLl1gYCBhbmQgYGBleHByWzAsIC4uLl1gYCBhcmUgZXF1aXZhbGVudCB0byBgYFplcm9Pck1vcmUoZXhwcilgYAogICAgICAgICAtIGBgZXhwclsxLCAuLi5dYGAgaXMgZXF1aXZhbGVudCB0byBgYE9uZU9yTW9yZShleHByKWBgCiAgICAgICAgIGBgTm9uZWBgIG1heSBiZSB1c2VkIGluIHBsYWNlIG9mIGBgLi4uYGAuCgogICAgICAgIE5vdGUgdGhhdCBgYGV4cHJbLi4uLCBuXWBgIGFuZCBgYGV4cHJbbSwgbl1gYGRvIG5vdCByYWlzZSBhbiBleGNlcHRpb24KICAgICAgICBpZiBtb3JlIHRoYW4gYGBuYGAgYGBleHByYGBzIGV4aXN0IGluIHRoZSBpbnB1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ICAgd2Quc2V0RGVidWcoKQoKICAgICAgICAgICAgT25lT3JNb3JlKHRlcm0pLnBhcnNlU3RyaW5nKCJhYmMgMTIzIHh5eiA4OTAiKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAwKDEsMSkKICAgICAgICAgICAgTWF0Y2hlZCBhbHBoYXdvcmQgLT4gWydhYmMnXQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDMoMSw0KQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciA0KSwgKGxpbmU6MSwgY29sOjUpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgNygxLDgpCiAgICAgICAgICAgIE1hdGNoZWQgYWxwaGF3b3JkIC0+IFsneHl6J10KICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAxMSgxLDEyKQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciAxMiksIChsaW5lOjEsIGNvbDoxMykKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAxNSgxLDE2KQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciAxNSksIChsaW5lOjEsIGNvbDoxNikKCiAgICAgICAgVGhlIG91dHB1dCBzaG93biBpcyB0aGF0IHByb2R1Y2VkIGJ5IHRoZSBkZWZhdWx0IGRlYnVnIGFjdGlvbnMgLSBjdXN0b20gZGVidWcgYWN0aW9ucyBjYW4gYmUKICAgICAgICBzcGVjaWZpZWQgdXNpbmcgOmNsYXNzOmBzZXREZWJ1Z0FjdGlvbnNgLiBQcmlvciB0byBhdHRlbXB0aW5nCiAgICAgICAgdG8gbWF0Y2ggdGhlIGBgd2RgYCBleHByZXNzaW9uLCB0aGUgZGVidWdnaW5nIG1lc3NhZ2UgYGAiTWF0Y2ggPGV4cHJuYW1lPiBhdCBsb2MgPG4+KDxsaW5lPiw8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YWJsZSBjb21tZW50IGZpbHRlcmluZwogICAgICAgICAtIGZ1bGxEdW1wIC0gKGRlZmF1bHQ9IGBgVHJ1ZWBgKSAtIGR1bXAgcmVzdWx0cyBhcyBsaXN0IGZvbGxvd2VkIGJ5IHJlc3VsdHMgbmFtZXMgaW4gbmVzdGVkIG91dGxpbmU7CiAgICAgICAgICAgICAgaWYgRmFsc2UsIG9ubHkgZHVtcCBuZXN0ZWQgbGlzdAogICAgICAgICAtIHByaW50UmVzdWx0cyAtIChkZWZhdWx0PSBgYFRydWVgYCkgcHJpbnRzIHRlc3Qgb3V0cHV0IHRvIHN0ZG91dAogICAgICAgICAtIGZhaWx1cmVUZXN0cyAtIChkZWZhdWx0PSBgYEZhbHNlYGApIGluZGljYXRlcyBpZiB0aGVzZSB0ZXN0cyBhcmUgZXhwZWN0ZWQgdG8gZmFpbCBwYXJzaW5nCiAgICAgICAgIC0gcG9zdFBhcnNlIC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSBvcHRpb25hbCBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBwYXJzZSByZXN1bHRzOyBjYWxsZWQgYXMKICAgICAgICAgICAgICBgZm4odGVzdF9zdHJpbmcsIHBhcnNlX3Jlc3VsdHMpYCBhbmQgcmV0dXJucyBhIHN0cmluZyB0byBiZSBhZGRlZCB0byB0aGUgdGVzdCBvdXRwdXQKICAgICAgICAgLSBmaWxlIC0gKGRlZmF1bHQ9YGBOb25lYGApIG9wdGlvbmFsIGZpbGUtbGlrZSBvYmplY3QgdG8gd2hpY2ggdGVzdCBvdXRwdXQgd2lsbCBiZSB3cml0dGVuOwogICAgICAgICAgICAgIGlmIE5vbmUsIHdpbGwgZGVmYXVsdCB0byBgYHN5cy5zdGRvdXRgYAoKICAgICAgICBSZXR1cm5zOiBhIChzdWNjZXNzLCByZXN1bHRzKSB0dXBsZSwgd2hlcmUgc3VjY2VzcyBpbmRpY2F0ZXMgdGhhdCBhbGwgdGVzdHMgc3VjY2VlZGVkCiAgICAgICAgKG9yIGZhaWxlZCBpZiBgYGZhaWx1cmVUZXN0c2BgIGlzIFRydWUpLCBhbmQgdGhlIHJlc3VsdHMgY29udGFpbiBhIGxpc3Qgb2YgbGluZXMgb2YgZWFjaAogICAgICAgIHRlc3QncyBvdXRwdXQKCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBudW1iZXJfZXhwciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyLmNvcHkoKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgICAgIDEwMAogICAgICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgICAgICcnJykKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAgICAgMy4xNC4xNTkKICAgICAgICAgICAgICAgICcnJywgZmFpbHVyZVRlc3RzPVRydWUpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIFsxMDBdCgogICAgICAgICAgICAjIG5lZ2F0aXZlIGludGVnZXIKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICBbLTEwMF0KCiAgICAgICAgICAgICMgZmxvYXQgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICBbMWUtMTJdCgogICAgICAgICAgICBTdWNjZXNzCgogICAgICAgICAgICAjIHN0cmF5IGNoYXJhY3RlcgogICAgICAgICAgICAxMDBaCiAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgMyksIChsaW5lOjEsIGNvbDo0KQoKICAgICAgICAgICAgIyBtaXNzaW5nIGxlYWRpbmcgZGlnaXQgYmVmb3JlICcuJwogICAgICAgICAgICAtLjEwMAogICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIHtyZWFsIG51bWJlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24gfCByZWFsIG51bWJlciB8IHNpZ25lZCBpbnRlZ2VyfSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCgogICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAzLjE0LjE1OQogICAgICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCAoYXQgY2hhciA0KSwgKGxpbmU6MSwgY29sOjUpCgogICAgICAgICAgICBTdWNjZXNzCgogICAgICAgIEVhY2ggdGVzdCBzdHJpbmcgbXVzdCBiZSBvbiBhIHNpbmdsZSBsaW5lLiBJZiB5b3Ugd2FudCB0byB0ZXN0IGEgc3RyaW5nIHRoYXQgc3BhbnMgbXVsdGlwbGUKICAgICAgICBsaW5lcywgY3JlYXRlIGEgdGVzdCBsaWtlIHRoaXM6OgoKICAg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YXQgbW9zdCAnbicgbWlzbWF0Y2hpbmcgY2hhcmFjdGVycy4KICAgIDpjbGFzczpgQ2xvc2VNYXRjaGAgdGFrZXMgcGFyYW1ldGVyczoKCiAgICAgLSBgYG1hdGNoX3N0cmluZ2BgIC0gc3RyaW5nIHRvIGJlIG1hdGNoZWQKICAgICAtIGBgbWF4TWlzbWF0Y2hlc2BgIC0gKGBgZGVmYXVsdD0xYGApIG1heGltdW0gbnVtYmVyIG9mCiAgICAgICBtaXNtYXRjaGVzIGFsbG93ZWQgdG8gY291bnQgYXMgYSBtYXRjaAoKICAgIFRoZSByZXN1bHRzIGZyb20gYSBzdWNjZXNzZnVsIHBhcnNlIHdpbGwgY29udGFpbiB0aGUgbWF0Y2hlZCB0ZXh0CiAgICBmcm9tIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHRoZSBmb2xsb3dpbmcgbmFtZWQgcmVzdWx0czoKCiAgICAgLSBgYG1pc21hdGNoZXNgYCAtIGEgbGlzdCBvZiB0aGUgcG9zaXRpb25zIHdpdGhpbiB0aGUKICAgICAgIG1hdGNoX3N0cmluZyB3aGVyZSBtaXNtYXRjaGVzIHdlcmUgZm91bmQKICAgICAtIGBgb3JpZ2luYWxgYCAtIHRoZSBvcmlnaW5hbCBtYXRjaF9zdHJpbmcgdXNlZCB0byBjb21wYXJlCiAgICAgICBhZ2FpbnN0IHRoZSBpbnB1dCBzdHJpbmcKCiAgICBJZiBgYG1pc21hdGNoZXNgYCBpcyBhbiBlbXB0eSBsaXN0LCB0aGVuIHRoZSBtYXRjaCB3YXMgYW4gZXhhY3QKICAgIG1hdGNoLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBwYXR0ID0gQ2xvc2VNYXRjaCgiQVRDQVRDR0FBVEdHQSIpCiAgICAgICAgcGF0dC5wYXJzZVN0cmluZygiQVRDQVRDR0FBWEdHQSIpICMgLT4gKFsnQVRDQVRDR0FBWEdHQSddLCB7J21pc21hdGNoZXMnOiBbWzldXSwgJ29yaWdpbmFsJzogWydBVENBVENHQUFUR0dBJ119KQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FYQ0dBQVhHR0EiKSAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgJ0FUQ0FU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ZGVmYXVsdCB2YWx1ZXMgZm9yCiAgICBgYG1heGBgIGFuZCBgYGV4YWN0YGAgYXJlIDAsIG1lYW5pbmcgbm8gbWF4aW11bSBvciBleGFjdAogICAgbGVuZ3RoIHJlc3RyaWN0aW9uLiBBbiBvcHRpb25hbCBgYGV4Y2x1ZGVDaGFyc2BgIHBhcmFtZXRlciBjYW4KICAgIGxpc3QgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGJlIGZvdW5kIGluIHRoZSBpbnB1dCBgYGJvZHlDaGFyc2BgCiAgICBzdHJpbmc7IHVzZWZ1bCB0byBkZWZpbmUgYSB3b3JkIG9mIGFsbCBwcmludGFibGVzIGV4Y2VwdCBmb3Igb25lIG9yCiAgICB0d28gY2hhcmFjdGVycywgZm9yIGluc3RhbmNlLgoKICAgIDpjbGFzczpgc3JhbmdlYCBpcyB1c2VmdWwgZm9yIGRlZmluaW5nIGN1c3RvbSBjaGFyYWN0ZXIgc2V0IHN0cmluZ3MKICAgIGZvciBkZWZpbmluZyBgYFdvcmRgYCBleHByZXNzaW9ucywgdXNpbmcgcmFuZ2Ugbm90YXRpb24gZnJvbQogICAgcmVndWxhciBleHByZXNzaW9uIGNoYXJhY3RlciBzZXRzLgoKICAgIEEgY29tbW9uIG1pc3Rha2UgaXMgdG8gdXNlIDpjbGFzczpgV29yZGAgdG8gbWF0Y2ggYSBzcGVjaWZpYyBsaXRlcmFsCiAgICBzdHJpbmcsIGFzIGluIGBgV29yZCgiQWRkcmVzcyIpYGAuIFJlbWVtYmVyIHRoYXQgOmNsYXNzOmBXb3JkYAogICAgdXNlcyB0aGUgc3RyaW5nIGFyZ3VtZW50IHRvIGRlZmluZSAqc2V0cyogb2YgbWF0Y2hhYmxlIGNoYXJhY3RlcnMuCiAgICBUaGlzIGV4cHJlc3Npb24gd291bGQgbWF0Y2ggIkFkZCIsICJBQUEiLCAiZEFyZWQiLCBvciBhbnkgb3RoZXIgd29yZAogICAgbWFkZSB1cCBvZiB0aGUgY2hhcmFjdGVycyAnQScsICdkJywgJ3InLCAnZScsIGFuZCAncycuIFRvIG1hdGNoIGFuCiAgICBleGFjdCBsaXRlcmFsIHN0cmluZywgdXNlIDpjbGFzczpgTGl0ZXJhbGAgb3IgOmNsYXNzOmBLZXl3b3JkYC4KCiAgICBweXBhcnNpbmcgaW5jbHVkZXMgaGVscGVyIHN0cmluZ3MgZm9yIGJ1aWxkaW5nIFdvcmRzOgoKICAgICAtIDpjbGFzczpgYWxwaGFzYAogICAgIC0gOmNsYXNzOmBudW1zYAogICAgIC0gOmNsYXNzOmBhbHBoYW51bXNgCiAgICAgLSA6Y2xhc3M6YGhleG51bXNgCiAgICAgLSA6Y2xhc3M6YGFscGhhczhiaXRgIChhbHBoYWJldGljIGNoYXJhY3RlcnMgaW4gQVNDSUkgcmFuZ2UgMTI4LTI1NQogICAgICAgLSBhY2NlbnRlZCwgdGlsZGVkLCB1bWxhdXRlZCwgZXRjLikKICAgICAtIDpjbGFzczpgcHVuYzhiaXRgIChub24tYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIGluIEFTQ0lJIHJhbmdlCiAgICAgICAxMjgtMjU1IC0gY3VycmVuY3ksIHN5bWJvbHMsIHN1cGVyc2NyaXB0cywgZGlhY3JpdGljYWxzLCBldGMuKQogICAgIC0gOmNsYXNzOmBwcmludGFibGVzYCAoYW55IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcikKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgIyBhIHdvcmQgY29tcG9zZWQgb2YgZGlnaXRzCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykgIyBlcXVpdmFsZW50IHRvIFdvcmQoIjAxMjM0NTY3ODkiKSBvciBXb3JkKHNyYW5nZSgiMC05IikpCgogICAgICAgICMgYSB3b3JkIHdpdGggYSBsZWFkaW5nIGNhcGl0YWwsIGFuZCB6ZXJvIG9yIG1vcmUgbG93ZXJjYXNlCiAgICAgICAgY2FwaXRhbF93b3JkID0gV29yZChhbHBoYXMudXBwZXIoKSwgYWxwaGFzLmxvd2VyKCkpCgogICAgICAgICMgaG9zdG5hbWVzIGFyZSBhbHBoYW51bWVyaWMsIHdpdGggbGVhZGluZyBhbHBoYSwgYW5kICctJwogICAgICAgIGhvc3RuYW1lID0gV29yZChhbHBoYXMsIGFscGhhbnVtcyArICctJykKCiAgICAgICAgIyByb21hbiBudW1lcmFsIChub3Qg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AVoFZBNkCWQKhAFaBmQUZAtkDIQBWgeHAGYBZA1kDoQIWghkD2QQhABaCYcABABaClMAKRVyRAAAAGFoBAAAVG9rZW4gZm9yIG1hdGNoaW5nIHN0cmluZ3MgdGhhdCBtYXRjaCBhIGdpdmVuIHJlZ3VsYXIKICAgIGV4cHJlc3Npb24uIERlZmluZWQgd2l0aCBzdHJpbmcgc3BlY2lmeWluZyB0aGUgcmVndWxhciBleHByZXNzaW9uIGluCiAgICBhIGZvcm0gcmVjb2duaXplZCBieSB0aGUgc3RkbGliIFB5dGhvbiAgYHJlIG1vZHVsZSA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWw+YF8uCiAgICBJZiB0aGUgZ2l2ZW4gcmVnZXggY29udGFpbnMgbmFtZWQgZ3JvdXBzIChkZWZpbmVkIHVzaW5nIGBgKD9QPG5hbWU+Li4uKWBgKSwKICAgIHRoZXNlIHdpbGwgYmUgcHJlc2VydmVkIGFzIG5hbWVkIHBhcnNlIHJlc3VsdHMuCgogICAgSWYgaW5zdGVhZCBvZiB0aGUgUHl0aG9uIHN0ZGxpYiByZSBtb2R1bGUgeW91IHdpc2ggdG8gdXNlIGEgZGlmZmVyZW50IFJFIG1vZHVsZQogICAgKHN1Y2ggYXMgdGhlIGByZWdleGAgbW9kdWxlKSwgeW91IGNhbiByZXBsYWNlIGl0IGJ5IGVpdGhlciBidWlsZGluZyB5b3VyCiAgICBSZWdleCBvYmplY3Qgd2l0aCBhIGNvbXBpbGVkIFJFIHRoYXQgd2FzIGNvbXBpbGVkIHVzaW5nIHJlZ2V4OgoKICAgIEV4YW1wbGU6OgoKICAgICAgICByZWFsbnVtID0gUmVnZXgociJbKy1dP1xkK1wuXGQqIikKICAgICAgICBkYXRlID0gUmVnZXgocicoP1A8eWVhcj5cZHs0fSktKD9QPG1vbnRoPlxkXGQ/KS0oP1A8ZGF5PlxkXGQ/KScpCiAgICAgICAgIyByZWY6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI2NzM5OS9ob3ctZG8teW91LW1hdGNoLW9ubHktdmFsaWQtcm9tYW4tbnVtZXJhbHMtd2l0aC1hLXJlZ3VsYXIt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IHN0cmluZ3MgdGhhdCBhcmUgZGVsaW1pdGVkIGJ5IHF1b3RpbmcgY2hhcmFjdGVycy4KCiAgICBEZWZpbmVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgoKICAgICAgICAtIHF1b3RlQ2hhciAtIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGRlZmluaW5nIHRoZQogICAgICAgICAgcXVvdGUgZGVsaW1pdGluZyBzdHJpbmcKICAgICAgICAtIGVzY0NoYXIgLSBjaGFyYWN0ZXIgdG8gZXNjYXBlIHF1b3RlcywgdHlwaWNhbGx5IGJhY2tzbGFzaAogICAgICAgICAgKGRlZmF1bHQ9IGBgTm9uZWBgKQogICAgICAgIC0gZXNjUXVvdGUgLSBzcGVjaWFsIHF1b3RlIHNlcXVlbmNlIHRvIGVzY2FwZSBhbiBlbWJlZGRlZCBxdW90ZQogICAgICAgICAgc3RyaW5nIChzdWNoIGFzIFNRTCdzIGBgIiJgYCB0byBlc2NhcGUgYW4gZW1iZWRkZWQgYGAiYGApCiAgICAgICAgICAoZGVmYXVsdD0gYGBOb25lYGApCiAgICAgICAgLSBtdWx0aWxpbmUgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBxdW90ZXMgY2FuIHNwYW4KICAgICAgICAgIG11bHRpcGxlIGxpbmVzIChkZWZhdWx0PSBgYEZhbHNlYGApCiAgICAgICAgLSB1bnF1b3RlUmVzdWx0cyAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXRjaGVkIHRleHQKICAgICAgICAgIHNob3VsZCBiZSB1bnF1b3RlZCAoZGVmYXVsdD0gYGBUcnVlYGApCiAgICAgICAgLSBlbmRRdW90ZUNoYXIgLSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgY2hhcmFjdGVycyBkZWZpbmluZyB0aGUKICAgICAgICAgIGVuZCBvZiB0aGUgcXVvdGUgZGVsaW1pdGVkIHN0cmluZyAoZGVmYXVsdD0gYGBOb25lYGAgID0+IHNhbWUgYXMKICAgICAgICAgIHF1b3RlQ2hhcikKICAgICAgICAtIGNvbnZlcnRXaGl0ZXNwYWNlRXNjYXBlcyAt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QUNLIFdISVRFIEJST1dOIikKICAgICAgICBzaGFwZV90eXBlID0gb25lT2YoIlNRVUFSRSBDSVJDTEUgVFJJQU5HTEUgU1RBUiBIRVhBR09OIE9DVEFHT04iKQogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgc2hhcGVfYXR0ciA9ICJzaGFwZToiICsgc2hhcGVfdHlwZSgic2hhcGUiKQogICAgICAgIHBvc25fYXR0ciA9ICJwb3NuOiIgKyBHcm91cChpbnRlZ2VyKCJ4IikgKyAnLCcgKyBpbnRlZ2VyKCJ5IikpKCJwb3NuIikKICAgICAgICBjb2xvcl9hdHRyID0gImNvbG9yOiIgKyBjb2xvcigiY29sb3IiKQogICAgICAgIHNpemVfYXR0ciA9ICJzaXplOiIgKyBpbnRlZ2VyKCJzaXplIikKCiAgICAgICAgIyB1c2UgRWFjaCAodXNpbmcgb3BlcmF0b3IgJyYnKSB0byBhY2NlcHQgYXR0cmlidXRlcyBpbiBhbnkgb3JkZXIKICAgICAgICAjIChzaGFwZSBhbmQgcG9zbiBhcmUgcmVxdWlyZWQsIGNvbG9yIGFuZCBzaXplIGFyZSBvcHRpb25hbCkKICAgICAgICBzaGFwZV9zcGVjID0gc2hhcGVfYXR0ciAmIHBvc25fYXR0ciAmIE9wdGlvbmFsKGNvbG9yX2F0dHIpICYgT3B0aW9uYWwoc2l6ZV9hdHRyKQoKICAgICAgICBzaGFwZV9zcGVjLnJ1blRlc3RzKCcnJwogICAgICAgICAgICBzaGFwZTogU1FVQVJFIGNvbG9yOiBCTEFDSyBwb3NuOiAxMDAsIDEyMAogICAgICAgICAgICBzaGFwZTogQ0lSQ0xFIHNpemU6IDUwIGNvbG9yOiBCTFVFIHBvc246IDUwLDgwCiAgICAgICAgICAgIGNvbG9yOkdSRUVOIHNpemU6MjAgc2hhcGU6VFJJQU5HTEUgcG9zbjoyMCw0MAogICAgICAgICAgICAnJycKICAgICAgICAgICAgKQoKICAgIHByaW50czo6CgogICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgWydzaGFwZTonLCAnU1FVQVJFJywgJ2NvbG9yOicsICdCTEFDSycsICdwb3NuOicsIFsnMTAwJywgJywnLCAnMTIwJ11dCiAgICAgICAgLSBjb2xvcjogQkxBQ0sKICAgICAgICAtIHBvc246IFsnMTAwJywgJywnLCAnMTIwJ10KICAgICAgICAgIC0geDogMTAwCiAgICAgICAgICAtIHk6IDEyMAogICAgICAgIC0gc2hhcGU6IFNRVUFSRQoKCiAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgIFsnc2hhcGU6JywgJ0NJUkNMRScsICdzaXplOicsICc1MCcsICdjb2xvcjonLCAnQkxVRScsICdwb3NuOicsIFsnNTAnLCAnLCcsICc4MCddXQogICAgICAgIC0gY29sb3I6IEJMVUUKICAgICAgICAtIHBvc246IFsnNTAnLCAnLCcsICc4MCddCiAgICAgICAgICAtIHg6IDUwCiAgICAgICAgICAtIHk6IDgwCiAgICAgICAgLSBzaGFwZTogQ0lSQ0xFCiAgICAgICAgLSBzaXplOiA1MAoKCiAgICAgICAgY29sb3I6IEdSRUVOIHNpemU6IDIwIHNoYXBlOiBUUklBTkdMRSBwb3NuOiAyMCw0MAogICAgICAgIFsnY29sb3I6JywgJ0dSRUVOJywgJ3NpemU6JywgJzIwJywgJ3NoYXBlOicsICdUUklBTkdMRScsICdwb3NuOicsIFsnMjAnLCAnLCcsICc0MCddXQogICAgICAgIC0gY29sb3I6IEdSRUVOCiAgICAgICAgLSBwb3NuOiBbJzIwJywgJywnLCAnNDAnXQogICAgICAgICAgLSB4OiAyMAogICAgICAgICAgLSB5OiA0MAogICAgICAgIC0gc2hhcGU6IFRSSUFOR0xFCiAgICAgICAgLSBzaXplOiAyMAogICAgVGMDAAAAAAAAAAMAAAAEAAAAAwAAAHM+AAAAdAB0AXwAgwKgAnwBfAKhAgEAdANkAWQChAB8AGoERACDAYMBfABfBWQDfABfBmQDfABfB2QDfABfCGQAUwApBE5jAQAAAAAAAAACAAAAAgAAAHMAAABzFAAAAHwAXQx9AXwBagBWAAEAcQJkAFMAKQFOKQFywwEAACkCchUAAABy6wEAAHISAAAAchIAAAByEwAAAHKnAAAADBEAAHMCAAAABAB6IEVhY2guX19pbml0X18uPGxvY2Fscz4uPGdlbmV4cHI+VCkJcnsCAAByKAAAAHLKAAAAcuQBAABy4gIAAHLDAQAAcsABAADaDmluaXRFeHByR3JvdXBzcr8BAAApA3LIAAAAcuICAAByzgEAACkBcq4BAAByEgAAAHITAAAAcsoAAAAKEQAAcwoAAAAAARIBFgEGAQYBeg1FYWNoLl9faW5pdF9fYwEAAAAAAAAAAQAAAAMAAAADAAAAcygAAAB0AHQBfACDAqACoQABAHQDZAFkAoQAfABqBEQAgwGDAXwAXwV8AFMAKQNOYwEAAAAAAAAAAgAAAAIAAABzAAAAcxQAAAB8AF0MfQF8AWoAVgABAHECZABTACkBTikBcsMBAAApAnIVAAAAcusBAAByEgAAAHISAAAAchMAAABypwAAABMRAABzAgAAAAQAeiJFYWNoLnN0cmVhbWxpbmUuPGxvY2Fscz4uPGdlbmV4cHI+KQZyewIAAHIoAAAAchoCAABy5AEAAHLiAgAAcsMBAAApAXLIAAAAKQFyrgEAAHISAAAAchMAAAByGgIAABERAABzBgAAAAABDgEWAXoPRWFjaC5zdHJlYW1saW5lYwQAAAAAAAAAEQAAAAkAAAADAAAAc/oBAAB8AGoAcpJ0AWQBZAKEAHwAagJEAIMBgwF8AF8DZANkBIQAfABqAkQAgwF9BGQFZASEAHwAagJEAIMBfQV8BHwFFwB8AF8EZAZkBIQAfABqAkQAgwF8AF8FZAdkBIQAfABqAkQAgwF8AF8GZAhkBIQAfABqAkQAgwF8AF8HfAAEAGoHfABqBjcAAgBfB2QJfABfAHwCfQZ8AGoHZABkAIUCGQB9B3wAagRkAGQAhQIZAIkAZwB9CGQKfQl4tnwJkAFycHwHiAAXAHwAagUXAHwAagYXAH0KZwB9C3h+fApEAF12fQx5EHwMoAh8AXwGoQJ9BlcAbiAEAHQJawqQAXIUAQABAAEAfAugCnwMoQEBAFkAceBYAHwIoAp8AGoDoAt0DHwMgwF8DKECoQEBAHwMfAdrBpABckR8B6ANfAyhAQEAceB8DIgAawZy4IgAoA18DKEBAQBx4FcAdA58C4MBdA58CoMBawJyvGQJfQlxvFcAfAeQAXKcZAugD2QMZAKEAHwHRACDAaEBfQ10CXwBfAJkDXwNFgCDA4IBfAiHAGYBZA5kBIQIfABqAkQAgwE3AH0IZwB9DngqfAhEAF0ifQx8DKAQfAF8AnwDoQNcAn0CfQ98DqAKfA+hAQEAkAFxvlcAdBF8DnQSZwCDAYMCfRB8AnwQZgJTACkPTmMBAAAAAAAAAAIAAAAEAAAAcwAAAHMmAAAAfABdHn0BdAB8AXQBgwJyAnQCfAFqA4MBfAFmAlYAAQBxAmQAUwApAU4pBHKaAAAAcjgAAAByYQIAAHKVAQAAKQJyFQAAAHLrAQAAchIAAAByEgAAAHITAAAAcqcAAAAYEQAAcwIAAAAEAHohRWFjaC5wYXJzZUltcGwuPGxvY2Fscz4uPGdlbmV4cHI+YwEAAAAAAAAAAgAAAAUAAABTAAAAcxwAAABnAHwAXRR9AXQAfAF0AYMCcgR8AWoCkQJxBFMAchIAAAApA3KaAAAAcjgAAABylQEAACkCchUAAABy6wEAAHISAAAAchIAAAByEwAAAHIXAAAAGREAAHMCAAAABgB6IkVhY2gucGFyc2VJbXBsLjxsb2NhbHM+LjxsaXN0Y29tcD5jAQAAAAAAAAACAAAABgAAAFMAAABzJAAAAGcAfABdHH0BfAFqAHIEdAF8AXQCdANmAoMCcwR8AZECcQRTAHISAAAAKQRywwEAAHKaAAAAcjgAAAByRAAAACkCchUAAABy6wEAAHISAAAAchIAAAByEwAAAHIXAAAAGhEAAHMCAAAABgBjAQAAAAAAAAACAAAABQAAAFMAAABzHAAAAGcAfABdFH0BdAB8AXQBgwJyBHwBagKRAnEEUwByEgAAACkDcpoAAAByTwAAAHKVAQAAKQJyFQAAAHLrAQAAchIAAAByEgAAAHITAAAAchcAAAAcEQAAcwIAAAAGAGMBAAAAAAAAAAIAAAAFAAAAUwAAAHMcAAAAZwB8AF0UfQF0AHwBdAGDAnIEfAFqApECcQRTAHISAAAAKQNymgAAAHI2AAAAcpUBAAApAnIVAAAAcusBAAByEgAAAHISAAAAchMAAAByFwAAAB0RAABzAgAAAAYAYwEAAAAAAAAAAgAAAAcAAABTAAAAcyAAAABnAHwAXRh9AXQAfAF0AXQCdANmA4MCcwR8AZECcQRTAHISAAAAKQRymgAAAHI4AAAAck8AAAByNgAAACkCchUAAABy6wEAAHISAAAAchIAAAByEwAAAHIXAAAAHhEAAHMCAAAABgBGVHoCLCBjAQAAAAAAAAACAAAAAwAAAHMAAABzFgAAAHwAXQ59AXQAfAGDAVYAAQBxAmQAUwApAU4pAXKlAAAAKQJyFQAAAHLrAQAAchIAAAByEgAAAHITAAAAcqcAAAA5EQAAcwIAAAAEAHoqTWlzc2luZyBvbmUgb3IgbW9yZSByZXF1aXJlZCBlbGVtZW50cyAoJXMpYwEAAAAAAAAAAgAAAAUAAAATAAAAcyQAAABnAHwAXRx9AXQAfAF0AYMCcgR8AWoCiABrBnIEfAGRAnEEUwByEgAAACkDcpoAAAByOAAAAHKVAQAAKQJyFQAAAHLrAQAAKQHaBnRtcE9wdHISAAAAchMAAAByFwAAAD0RAABzAgAAAAYAKRNy9wIAAHIdAQAAcuICAADaB29wdDFtYXDaCW9wdGlvbmFsc9oObXVsdGlvcHRpb25hbHPaDW11bHRpcmVxdWlyZWTaCHJlcXVpcmVkcv4BAAByPAAAAHLtAAAAcvQAAAByYQIAANoGcmVtb3ZlctMAAABy2AAAAHLgAQAA2gNzdW1yPwAAACkRcsgAAABylAEAAHLEAAAActsBAADaBG9wdDHaBG9wdDLaBnRtcExvY9oHdG1wUmVxZNoKbWF0Y2hPcmRlctoMa2VlcE1hdGNoaW5n2gh0bXBFeHByc9oGZmFpbGVkcusBAADaB21pc3Npbmdy5gIAAHKYAgAA2gxmaW5hbFJlc3VsdHNyEgAAACkBcvgCAAByEwAAAHLnAAAAFhEAAHNQAAAAAAEGARYBEAEQAQoBEgESARIBEAEGAQQBDgEOAQQCBAEIARQBBAEKAQIBEAEQARACGAEKAQwBCAEOARABCAIGARQBEAMYAgQBCgESARACDgF6DkVhY2gucGFyc2VJbXBsYwEAAAAAAAAAAQAAAAUAAABDAAAAc0AAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAawhyOmQCZAOgA2QEZAWEAHwAagREAIMBoQEXAGQGFwB8AF8CfABqAlMAKQdOchEBAABy6gIAAHoDICYgYwEAAAAAAAAAAgAAAAMAAABzAAAAcxYAAAB8AF0OfQF0AHwBgwFWAAEAcQJkAFMAKQFOKQFypQAAACkCchUAAABy6wEAAHISAAAAchIAAAByEwAAAHKnAAAATBEAAHMCAAAABAB6H0VhY2guX19zdHJfXy48bG9jYWxzPi48Z2VuZXhwcj5y6wIAACkFcjsBAAByEQEAAHK9AQAActgAAABy4gIAACkBcsgAAAByEgAAAHISAAAAchMAAABy1QAAAEcRAABzCgAAAAABCgEGAgoBIAJ6DEVhY2guX19zdHJfX2MCAAAAAAAAAAQAAAAEAAAAQwAAAHMwAAAAfAFkAGQAhQIZAHwAZwEXAH0CeBh8AGoARABdDn0DfAOgAXwCoQEBAHEaVwBkAFMAKQFOKQJy4gIAAHJUAgAAKQRyyAAAAHIFAQAAcukCAABy6wEAAHISAAAAchIAAAByEwAAAHJUAgAAUBEAAHMGAAAAAAESAQwBehNFYWNoLmNoZWNrUmVjdXJzaW9uKQFUKQFUKQpyDwAAAHIQAAAAchEAAABy4QAAAHLKAAAAchoCAABy5wAAAHLVAAAAclQCAABygQIAAHISAAAAchIAAAApAXKuAQAAchMAAAByKAAAANEQAABzDAAAAAg4BAEOBwwFCjEICWMAAAAAAAAAAAAAAAAEAAAAAAAAAHNqAAAAZQBaAWQAWgJkAVoDZBWHAGYBZANkBIQJWgRkFmQGZAeEAVoFZAhkCYQAWgaHAGYBZApkC4QIWgeHAGYBZAxkDYQIWghkDmQPhABaCWQXZBFkEoQBWgqHAGYBZBNkFIQIWguHAAQAWgxTACkYcjsAAAB6ZkFic3RyYWN0IHN1YmNsYXNzIG9mIDpjbGFzczpgUGFyc2VyRWxlbWVudGAsIGZvciBjb21iaW5pbmcgYW5kCiAgICBwb3N0LXByb2Nlc3NpbmcgcGFyc2VkIHRva2Vucy4KICAgIEZjAwAAAAAAAAADAAAABAAAAAMAAABzmgAAAHQAdAF8AIMCoAJ8AqEBAQB0A3wBdASDAnJAdAV8AGoGdAeDAnIyfACgBnwBoQF9AW4OfACgBnQIfAGDAaEBfQF8AXwAXwlkAHwAXwp8AWQAawlylnwBagt8AF8LfAFqDHwAXwx8AKANfAFqDqEBAQB8AWoPfABfD3wBahB8AF8QfAFqEXwAXxF8AGoSoBN8AWoSoQEBAGQAUwApAU4pFHJ7AgAAcjsAAAByygAAAHKaAAAAch8BAADaCmlzc3ViY2xhc3NytwEAAHJJAAAAcjEAAABylQEAAHK9AQAAcsgBAABywwEAAHJMAgAAcsEBAABywAEAAHK/AQAAcswBAAByxQEAAHJPAQAAKQNyyAAAAHKVAQAAcs4BAAApAXKuAQAAchIAAAByEwAAAHLKAAAAWhEAAHMeAAAAAAEQAQoBDAEMAg4BBgEGAQgBCAEIAQwBCAEIAQgBehxQYXJzZUVsZW1lbnRFbmhhbmNlLl9faW5pdF9fVGMEAAAAAAAAAAQAAAAGAAAAQwAAAHMyAAAAfABqAGQAawlyHnwAagBqAXwBfAJ8A2QBZAKNBFMAdAJkA3wCfABqA3wAgwSCAWQAUwApBE5GKQFy3AEAAHK3AAAAKQRylQEAAHLgAQAAcjwAAAByyQEAACkEcsgAAABylAEAAHLEAAAActsBAAByEgAAAHISAAAAchMAAABy5wAAAGwRAABzBgAAAAABCgEUAnodUGFyc2VFbGVtZW50RW5oYW5jZS5wYXJzZUltcGxjAQAAAAAAAAABAAAAAgAAAEMAAABzKgAAAGQBfABfAHwAagGgAqEAfABfAXwAagFkAGsJciZ8AGoBoAOhAAEAfABTACkCTkYpBHLAAQAAcpUBAAByUgEAAHJLAgAAKQFyyAAAAHISAAAAchIAAAByEwAAAHJLAgAAchEAAHMKAAAAAAEGAQwBCgEKAXojUGFyc2VFbGVtZW50RW5oYW5jZS5sZWF2ZVdoaXRlc3BhY2VjAgAAAAAAAAACAAAABAAAAAMAAABzcgAAAHQAfAF0AYMCckJ8AXwAagJrB3JudAN0BHwAgwKgBXwBoQEBAHwAagZkAGsJcm58AGoGoAV8AGoCZAEZAKEBAQBuLHQDdAR8AIMCoAV8AaEBAQB8AGoGZABrCXJufABqBqAFfABqAmQBGQChAQEAfABTACkCTnKUAAAAKQdymgAAAHJIAAAAcsUBAAByewIAAHI7AAAAck4CAABylQEAACkCcsgAAAByUwEAACkBcq4BAAByEgAAAHITAAAAck4CAAB5EQAAcxIAAAAAAQoBCgEQAQoBFAIQAQoBEgF6GlBhcnNlRWxlbWVudEVuaGFuY2UuaWdub3JlYwEAAAAAAAAAAQAAAAMAAAADAAAAcyYAAAB0AHQBfACDAqACoQABAHwAagNkAGsJciJ8AGoDoAKhAAEAfABTACkBTikEcnsCAAByOwAAAHIaAgAAcpUBAAApAXLIAAAAKQFyrgEAAHISAAAAchMAAAByGgIAAIURAABzCAAAAAABDgEKAQoBeh5QYXJzZUVsZW1lbnRFbmhhbmNlLnN0cmVhbWxpbmVjAgAAAAAAAAADAAAAAwAAAEMAAABzQgAAAHwAfAFrBnIWdAB8AXwAZwEXAIMBggF8AWQAZACFAhkAfABnARcAfQJ8AGoBZABrCXI+fABqAaACfAKhAQEAZABTACkBTikDckMAAABylQEAAHJUAgAAKQNyyAAAAHIFAQAAcukCAAByEgAAAHISAAAAchMAAAByVAIAAIsRAABzCgAAAAABCAEOARIBCgF6IlBhcnNlRWxlbWVudEVuaGFuY2UuY2hlY2tSZWN1cnNpb25OYwIAAAAAAAAAAwAAAAMAAABDAAAAc0IAAAB8AWQAawhyDGcAfQF8AWQAZACFAhkAfABnARcAfQJ8AGoAZABrCXI0fABqAKABfAKhAQEAfACgAmcAoQEBAGQAUwApAU4pA3KVAQAAclYCAAByVAIAACkDcsgAAAByVQIAAHLjAgAAchIAAAByEgAAAHITAAAAclYCAACSEQAAcwwAAAAAAQgBBAESAQoBDAF6HFBhcnNlRWxlbWVudEVuaGFuY2UudmFsaWRhdGVjAQAAAAAAAAABAAAACAAAAAMAAABzVgAAAHkOdAB0AXwAgwKgAqEAUwAEAHQDawpyIgEAAQABAFkAbgJYAHwAagRkAGsIclB8AGoFZABrCXJQZAF8AGoGagd0CHwAagWDAWYCFgB8AF8EfABqBFMAKQJOegclczooJXMpKQlyewIAAHI7AAAActUAAAByiAEAAHK9AQAAcpUBAAByrgEAAHIPAAAAcqUAAAApAXLIAAAAKQFyrgEAAHISAAAAchMAAABy1QAAAJoRAABzDgAAAAABAgEOAQ4BBgIUARgBehtQYXJzZUVsZW1lbnRFbmhhbmNlLl9fc3RyX18pAUYpAVQpAU4pDXIPAAAAchAAAAByEQAAAHLhAAAAcsoAAABy5wAAAHJLAgAAck4CAAByGgIAAHJUAgAAclYCAABy1QAAAHKBAgAAchIAAAByEgAAACkBcq4BAAByEwAAAHI7AAAAVhEAAHMSAAAACAMEAQ4SCgYIBwwMDAYIBwoIYwAAAAAAAAAAAAAAAAMAAAAAAAAAcyoAAABlAFoBZABaAmQBWgOHAGYBZAJkA4QIWgRkB2QFZAaEAVoFhwAEAFoGUwApCHIqAAAAYWIDAABMb29rYWhlYWQgbWF0Y2hpbmcgb2YgdGhlIGdpdmVuIHBhcnNlIGV4cHJlc3Npb24uCiAgICBgYEZvbGxvd2VkQnlgYCBkb2VzICpub3QqIGFkdmFuY2UgdGhlIHBhcnNpbmcgcG9zaXRpb24gd2l0aGluCiAgICB0aGUgaW5wdXQgc3RyaW5nLCBpdCBvbmx5IHZlcmlmaWVzIHRoYXQgdGhlIHNwZWNpZmllZCBwYXJzZQogICAgZXhwcmVzc2lvbiBtYXRjaGVzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLiAgYGBGb2xsb3dlZEJ5YGAKICAgIGFsd2F5cyByZXR1cm5zIGEgbnVsbCB0b2tlbiBsaXN0LiBJZiBhbnkgcmVzdWx0cyBuYW1lcyBhcmUgZGVmaW5lZAogICAgaW4gdGhlIGxvb2thaGVhZCBleHByZXNzaW9uLCB0aG9zZSAqd2lsbCogYmUgcmV0dXJuZWQgZm9yIGFjY2VzcyBieQogICAgbmFtZS4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgIyB1c2UgRm9sbG93ZWRCeSB0byBtYXRjaCBhIGxhYmVsIG9ubHkgaWYgaXQgaXMgZm9sbG93ZWQgYnkgYSAnOicKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQoKICAgICAgICBPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZygic2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogdXBwZXIgbGVmdCIpLnBwcmludCgpCgogICAgcHJpbnRzOjoKCiAgICAgICAgW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsnY29sb3InLCAnQkxBQ0snXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXV0KICAgIGMCAAAAAAAAAAIAAAADAAAAAwAAAHMaAAAAdAB0AXwAgwKgAnwBoQEBAGQBfABfA2QAUwApAk5UKQRyewIAAHIqAAAAcsoAAABywwEAACkCcsgAAABylQEAACkBcq4BAAByEgAAAHITAAAAcsoAAAC7EQAAcwQAAAAAARABehNGb2xsb3dlZEJ5Ll9faW5pdF9fVGMEAAAAAAAAAAYAAAAFAAAAQwAAAHMoAAAAfABqAGoBfAF8AnwDZAGNA1wCfQR9BXwFZABkAIUCPQB8AnwFZgJTACkCTikBctsBAAApAnKVAQAAcuABAAApBnLIAAAAcpQBAAByxAAAAHLbAQAA2gFfcqQAAAByEgAAAHISAAAAchMAAABy5wAAAL8RAABzBgAAAAADFgEKAnoURm9sbG93ZWRCeS5wYXJzZUltcGwpAVQpB3IPAAAAchAAAAByEQAAAHLhAAAAcsoAAABy5wAAAHKBAgAAchIAAAByEgAAACkBcq4BAAByEwAAAHIqAAAApREAAHMGAAAACBUEAQwEYwAAAAAAAAAAAAAAAAQAAAAAAAAAcywAAABlAFoBZABaAmQBWgNkCYcAZgFkA2QEhAlaBGQKZAdkCIQBWgWHAAQAWgZTACkLcjIAAABhcAQAAExvb2tiZWhpbmQgbWF0Y2hpbmcgb2YgdGhlIGdpdmVuIHBhcnNlIGV4cHJlc3Npb24uCiAgICBgYFByZWNlZGVkQnlgYCBkb2VzIG5vdCBhZHZhbmNlIHRoZSBwYXJzaW5nIHBvc2l0aW9uIHdpdGhpbiB0aGUKICAgIGlucHV0IHN0cmluZywgaXQgb25seSB2ZXJpZmllcyB0aGF0IHRoZSBzcGVjaWZpZWQgcGFyc2UgZXhwcmVzc2lvbgogICAgbWF0Y2hlcyBwcmlvciB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4gIGBgUHJlY2VkZWRCeWBgIGFsd2F5cwogICAgcmV0dXJucyBhIG51bGwgdG9rZW4gbGlzdCwgYnV0IGlmIGEgcmVzdWx0cyBuYW1lIGlzIGRlZmluZWQgb24gdGhlCiAgICBnaXZlbiBleHByZXNzaW9uLCBpdCBpcyByZXR1cm5lZC4KCiAgICBQYXJhbWV0ZXJzOgoKICAgICAtIGV4cHIgLSBleHByZXNzaW9uIHRoYXQgbXVzdCBtYXRjaCBwcmlvciB0byB0aGUgY3VycmVudCBwYXJzZQogICAgICAgbG9jYXRpb24KICAgICAtIHJldHJlYXQgLSAoZGVmYXVsdD0gYGBOb25lYGApIC0gKGludCkgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycwogICAgICAgdG8gbG9va2JlaGluZCBwcmlvciB0byB0aGUgY3VycmVudCBwYXJzZSBsb2NhdGlvbgoKICAgIElmIHRoZSBsb29rYmVoaW5kIGV4cHJlc3Npb24gaXMgYSBzdHJpbmcsIExpdGVyYWwsIEtleXdvcmQsIG9yCiAgICBhIFdvcmQgb3IgQ2hhcnNOb3RJbiB3aXRoIGEgc3BlY2lmaWVkIGV4YWN0IG9yIG1heGltdW0gbGVuZ3RoLCB0aGVuCiAgICB0aGUgcmV0cmVhdCBwYXJhbWV0ZXIgaXMgbm90IHJlcXVpcmVkLiBPdGhlcndpc2UsIHJldHJlYXQgbXVzdCBiZQogICAgc3BlY2lmaWVkIHRvIGdpdmUgYSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGxvb2sgYmFjayBmcm9tCiAgICB0aGUgY3VycmVudCBwYXJzZSBwb3NpdGlvbiBmb3IgYSBsb29rYmVoaW5kIG1hdGNoLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICAjIFZCLXN0eWxlIHZhcmlhYmxlIG5hbWVzIHdpdGggdHlwZSBwcmVmaXhlcwogICAgICAgIGludF92YXIgPSBQcmVjZWRlZEJ5KCIjIikgKyBweXBhcnNpbmdfY29tbW9uLmlkZW50aWZpZXIKICAgICAgICBzdHJfdmFyID0gUHJlY2VkZWRCeSgiJCIpICsgcHlwYXJzaW5nX2NvbW1vbi5pZGVudGlmaWVyCgogICAgTmMDAAAAAAAAAAMAAAAEAAAAAwAAAHPOAAAAdAB0AXwAgwKgAnwBoQEBAHwAoAOhAKAEoQB8AF8DZAF8AF8FZAJ8AF8GZAJ8AF8HdAh8AXQJgwJySnQKfAGDAX0CZAF8AF8HblZ0CHwBdAt0DGYCgwJyZnwBag19AmQBfABfB246dAh8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dXN0IG1hdGNoIG9uZSBvciBtb3JlIHRpbWVzCiAgICAgLSBzdG9wT24gLSAoZGVmYXVsdD0gYGBOb25lYGApIC0gZXhwcmVzc2lvbiBmb3IgYSB0ZXJtaW5hdGluZyBzZW50aW5lbAogICAgICAgICAgKG9ubHkgcmVxdWlyZWQgaWYgdGhlIHNlbnRpbmVsIHdvdWxkIG9yZGluYXJpbHkgbWF0Y2ggdGhlIHJlcGV0aXRpb24KICAgICAgICAgIGV4cHJlc3Npb24pCgogICAgRXhhbXBsZTo6CgogICAgICAgIGRhdGFfd29yZCA9IFdvcmQoYWxwaGFzKQogICAgICAgIGxhYmVsID0gZGF0YV93b3JkICsgRm9sbG93ZWRCeSgnOicpCiAgICAgICAgYXR0cl9leHByID0gR3JvdXAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogQkxBQ0siCiAgICAgICAgT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkucHByaW50KCkgICMgRmFpbCEgcmVhZCAnY29sb3InIGFzIGRhdGEgaW5zdGVhZCBvZiBuZXh0IGxhYmVsIC0+IFtbJ3NoYXBlJywgJ1NRVUFSRSBjb2xvciddXQoKICAgICAgICAjIHVzZSBzdG9wT24gYXR0cmlidXRlIGZvciBPbmVPck1vcmUgdG8gYXZvaWQgcmVhZGluZyBsYWJlbCBzdHJpbmcgYXMgcGFydCBvZiB0aGUgZGF0YQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLnBwcmludCgpICMgQmV0dGVyIC0+IFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24n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LAAAAGUAWgFkAFoCZAFaA2QJhwBmAWQEZAWECVoEZApkB2QIhAFaBYcABABaBlMAKQtyRQAAAGH4CQAAVG9rZW4gZm9yIHNraXBwaW5nIG92ZXIgYWxsIHVuZGVmaW5lZCB0ZXh0IHVudGlsIHRoZSBtYXRjaGVkCiAgICBleHByZXNzaW9uIGlzIGZvdW5kLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gdGFyZ2V0IGV4cHJlc3Npb24gbWFya2luZyB0aGUgZW5kIG9mIHRoZSBkYXRhIHRvIGJlIHNraXBwZWQKICAgICAtIGluY2x1ZGUgLSAoZGVmYXVsdD0gYGBGYWxzZWBgKSBpZiBUcnVlLCB0aGUgdGFyZ2V0IGV4cHJlc3Npb24gaXMgYWxzbyBwYXJzZWQKICAgICAgICAgICh0aGUgc2tpcHBlZCB0ZXh0IGFuZCB0YXJnZXQgZXhwcmVzc2lvbiBhcmUgcmV0dXJuZWQgYXMgYSAyLWVsZW1lbnQgbGlzdCkuCiAgICAgLSBpZ25vcmUgLSAoZGVmYXVsdD0gYGBOb25lYGApIHVzZWQgdG8gZGVmaW5lIGdyYW1tYXJzICh0eXBpY2FsbHkgcXVvdGVkIHN0cmluZ3MgYW5kCiAgICAgICAgICBjb21tZW50cykgdGhhdCBtaWdodCBjb250YWluIGZhbHNlIG1hdGNoZXMgdG8gdGhlIHRhcmdldCBleHByZXNzaW9uCiAgICAgLSBmYWlsT24gLSAoZGVmYXVsdD0gYGBOb25lYGApIGRlZmluZSBleHByZXNzaW9ucyB0aGF0IGFyZSBub3QgYWxsb3dlZCB0byBiZQogICAgICAgICAgaW5jbHVkZWQgaW4gdGhlIHNraXBwZWQgdGVzdDsgaWYgZm91bmQgYmVmb3JlIHRoZSB0YXJnZXQgZXhwcmVzc2lvbiBpcyBmb3VuZCwKICAgICAgICAgIHRoZSBTa2lwVG8gaXMgbm90IGEgbWF0Y2gKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgcmVwb3J0ID0gJycnCiAgICAgICAgICAgIE91dHN0YW5kaW5nIElzc3VlcyBSZXBvcnQgLSAxIEphbiAyMDAwCgogICAgICAgICAgICAgICAjIHwgU2V2ZXJpdHkgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEYXlzIE9wZW4KICAgICAgICAgICAgLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tCiAgICAgICAgICAgICAxMDEgfCBDcml0aWNhbCB8IEludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2ggICAgICAgICAgICAgICAgIHwgICAgICAgICAgNgogICAgICAgICAgICAgIDk0IHwgQ29zbWV0aWMgfCBTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJykgICAgICAgICB8ICAgICAgICAgMTQKICAgICAgICAgICAgICA3OSB8IE1pbm9yICAgIHwgU3lzdGVtIHNsb3cgd2hlbiBydW5uaW5nIHRvbyBtYW55IHJlcG9ydHMgfCAgICAgICAgIDQ3CiAgICAgICAgICAgICcnJwogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgU0VQID0gU3VwcHJlc3MoJ3wnKQogICAgICAgICMgdXNlIFNraXBUbyB0byBzaW1wbHkgbWF0Y2ggZXZlcnl0aGluZyB1cCB1bnRpbCB0aGUgbmV4dCBTRVAKICAgICAgICAjIC0gaWdub3JlIHF1b3RlZCBzdHJpbmdzLCBzbyB0aGF0IGEgJ3wnIGNoYXJhY3RlciBpbnNpZGUgYSBxdW90ZWQgc3RyaW5nIGRvZXMgbm90IG1hdGNoCiAgICAgICAgIyAtIHBhcnNlIGFjdGlvbiB3aWxsIGNhbGwgdG9rZW4uc3RyaXAoKSBmb3IgZWFjaCBtYXRjaGVkIHRva2VuLCBpLmUuLCB0aGUgZGVzY3JpcHRpb24gYm9keQogICAgICAgIHN0cmluZ19kYXRhID0gU2tpcFRvKFNFUCwgaWdub3JlPXF1b3RlZFN0cmluZykKICAgICAgICBzdHJpbmdfZGF0YS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIuc3RyaXApKQogICAgICAgIHRpY2tldF9leHByID0gKGludGVnZXIoImlzc3VlX251bSIpICsgU0VQCiAgICAgICAgICAgICAgICAgICAgICArIHN0cmluZ19kYXRhKCJzZXYiKSArIFNFUAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgiZGVzYyIpICsgU0VQCiAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIoImRheXNfb3BlbiIpKQoKICAgICAgICBmb3IgdGt0IGluIHRpY2tldF9leHByLnNlYXJjaFN0cmluZyhyZXBvcnQpOgogICAgICAgICAgICBwcmludCB0a3QuZHVtcCgpCgogICAgcHJpbnRzOjoKCiAgICAgICAgWycxMDEnLCAnQ3JpdGljYWwnLCAnSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaCcsICc2J10KICAgICAgICAtIGRheXNfb3BlbjogNgogICAgICAgIC0gZGVzYzogSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaAogICAgICAgIC0gaXNzdWVfbnVtOiAxMDEKICAgICAgICAtIHNldjogQ3JpdGljYWwKICAgICAgICBbJzk0JywgJ0Nvc21ldGljJywgIlNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKSIsICcxNCddCiAgICAgICAgLSBkYXlzX29wZW46IDE0CiAgICAgICAgLSBkZXNjOiBTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJykKICAgICAgICAtIGlzc3VlX251bTogOTQKICAgICAgICAtIHNldjogQ29zbWV0aWMKICAgICAgICBbJzc5JywgJ01pbm9yJywgJ1N5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzJywgJzQ3J10KICAgICAgICAtIGRheXNfb3BlbjogNDcKICAgICAgICAtIGRlc2M6IFN5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzCiAgICAgICAgLSBpc3N1ZV9udW06IDc5CiAgICAgICAgLSBzZXY6IE1pbm9yCiAgICBGTmMFAAAAAAAAAAUAAAADAAAAAwAAAHNgAAAAdAB0AXwAgwKgAnwBoQEBAHwDfABfA2QBfABfBGQCfABfBXwCfABfBmQCfABfB3QIfAR0CYMCckZ8AKAK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YXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IGxpZ2h0IGJsdWUgdGV4dHVyZTogYnVybGFwIgogICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgIyBwcmludCBhdHRyaWJ1dGVzIGFzIHBsYWluIGdyb3VwcwogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKCiAgICAgICAgIyBpbnN0ZWFkIG9mIE9uZU9yTW9yZShleHByKSwgcGFyc2UgdXNpbmcgRGljdChPbmVPck1vcmUoR3JvdXAoZXhwcikpKSAtIERpY3Qgd2lsbCBhdXRvLWFzc2lnbiBuYW1lcwogICAgICAgIHJlc3VsdCA9IERpY3QoT25lT3JNb3JlKEdyb3VwKGF0dHJfZXhwcikpKS5wYXJzZVN0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCgogICAgICAgICMgYWNjZXNzIG5hbWVkIGZpZWxkcyBhcyBkaWN0IGVudHJpZXMsIG9yIG91dHB1dCBhcyBkaWN0CiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKQogICAgICAgIHByaW50KHJlc3VsdC5hc0RpY3QoKSkKCiAgICBwcmludHM6OgoKICAgICAgICBbJ3NoYXBlJywgJ1NRVUFSRScsICdwb3NuJywgJ3VwcGVyIGxlZnQnLCAnY29sb3InLCAnbGlnaHQgYmx1ZScsICd0ZXh0dXJlJywgJ2J1cmxh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CAIEAQgDCAZjAQAAAAAAAAACAAAACAAAAAMAAABzOgAAAHQAiACDAYkAhwBmAWQBZAKECH0BeQyIAGoBfAFfAVcAbhQEAHQCawpyNAEAAQABAFkAbgJYAHwBUwApA2FxAwAARGVjb3JhdG9yIGZvciBkZWJ1Z2dpbmcgcGFyc2UgYWN0aW9ucy4KCiAgICBXaGVuIHRoZSBwYXJzZSBhY3Rpb24gaXMgY2FsbGVkLCB0aGlzIGRlY29yYXRvciB3aWxsIHByaW50CiAgICBgYCI+PiBlbnRlcmluZyBtZXRob2QtbmFtZShsaW5lOjxjdXJyZW50X3NvdXJjZV9saW5lPiwgPHBhcnNlX2xvY2F0aW9uPiwgPG1hdGNoZWRfdG9rZW5zPikiYGAuCiAgICBXaGVuIHRoZSBwYXJzZSBhY3Rpb24gY29tcGxldGVzLCB0aGUgZGVjb3JhdG9yIHdpbGwgcHJpbnQKICAgIGBgIjw8ImBgIGZvbGxvd2VkIGJ5IHRoZSByZXR1cm5lZCB2YWx1ZSwgb3IgYW55IGV4Y2VwdGlvbiB0aGF0IHRoZSBwYXJzZSBhY3Rpb24gcmFpc2VkLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKQoKICAgICAgICBAdHJhY2VQYXJzZUFjdGlvbgogICAgICAgIGRlZiByZW1vdmVfZHVwbGljYXRlX2NoYXJzKHRva2Vucyk6CiAgICAgICAgICAgIHJldHVybiAnJy5qb2luKHNvcnRlZChzZXQoJycuam9pbih0b2tlbnMpKSkpCgogICAgICAgIHdkcyA9IE9uZU9yTW9yZSh3ZCkuc2V0UGFyc2VBY3Rpb24ocmVtb3ZlX2R1cGxpY2F0ZV9jaGFycykKICAgICAgICBwcmludCh3ZHMucGFyc2VTdHJpbmcoInNsa2RqcyBzbGQgc2xkZCBzZGxmIHNkbGpmIikpCgogICAgcHJpbnRzOjoKCiAgICAgICAgPj5lbnRlcmluZyByZW1vdmVfZHVwbGljYXRlX2NoYXJzKGxpbmU6ICdzbGtkanMgc2xkIHNsZGQgc2RsZiBzZGxqZicsIDAsIChbJ3Nsa2RqcycsICdzbGQnLCAnc2xkZCcsICdzZGxmJywgJ3NkbGpmJ10sIHt9KSkKICAgICAgICA8PGxlYXZpbmcgcmVtb3ZlX2R1cGxpY2F0ZV9jaGFycyAocmV0OiAnZGZqa2xzJykKICAgICAgICBbJ2RmamtscyddCiAgICBjAAAAAAAAAAAHAAAACgAAABcAAABztAAAAIgAagB9AXwAZAFkAIUCGQBcA30CfQN9BHQBfACDAWQCawRyOHwAZAMZAGoCagBkBBcAfAEXAH0BdANqBKAFZAV8AXQGfAN8AoMCfAN8BGYEFgChAQEAeQyIAHwAjgB9BVcAbjgEAHQHawpymgEAfQYBAHoadANqBKAFZAZ8AXwGZgIWAKEBAQCCAFcAZABkAH0GfgZYAFkAbgJYAHQDagSgBWQHfAF8BWYCFgChAQEAfAVTACkITnKeAQAAcpEAAAByAQAAANoBLnoiPj5lbnRlcmluZyAlcyhsaW5lOiAnJXMnLCAlZCwgJXIpCnodPDxsZWF2aW5nICVzIChleGNlcHRpb246ICVzKQp6Fzw8bGVhdmluZyAlcyAocmV0OiAlcikKKQhyDwAAAHLTAAAAcq4BAABynwAAANoGc3RkZXJycmoCAAByZQAAAHKIAQAAKQfaBnBhQXJnc9oIdGhpc0Z1bmNyqwAAAHK8AAAAcpcAAABypAAAAHL4AAAAKQFyXAIAAHISAAAAchMAAADaAXq7FAAAcxgAAAAAAQYBEgEMARQBHgECAQwBEAEUARQBFAF6G3RyYWNlUGFyc2VBY3Rpb24uPGxvY2Fscz4ueikDcsEAAAByDwAAAHLPAAAAKQJyXAIAAHI4AwAAchIAAAApAXJcAgAAchMAAABygAAAAKEUAABzDgAAAAAZCAEMDQIBDAEOAQYB+gEsYwMAAAAAAAAABAAAAAUAAABDAAAAc2AAAAB0AHwAgwFkARcAdAB8AYMBFwBkAhcAdAB8AIMBFwBkAxcAfQN8AnJCdAF8AHQCfAF8ABcAgwEXAIMBoAN8A6EBUwB8AHQCdAR8AYMBfAAXAIMBFwCgA3wDoQFTAGQEUwApBWHOAgAASGVscGVyIHRvIGRlZmluZSBhIGRlbGltaXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zIC0gdGhlIGRlbGltaXRlcgogICAgZGVmYXVsdHMgdG8gJywnLiBCeSBkZWZhdWx0LCB0aGUgbGlzdCBlbGVtZW50cyBhbmQgZGVsaW1pdGVycyBjYW4KICAgIGhhdmUgaW50ZXJ2ZW5pbmcgd2hpdGVzcGFjZSwgYW5kIGNvbW1lbnRzLCBidXQgdGhpcyBjYW4gYmUKICAgIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBgYGNvbWJpbmU9VHJ1ZWBgIGluIHRoZSBjb25zdHJ1Y3Rvci4gSWYKICAgIGBgY29tYmluZWBgIGlzIHNldCB0byBgYFRydWVgYCwgdGhlIG1hdGNoaW5nIHRva2VucyBhcmUKICAgIHJldHVybmVkIGFzIGEgc2luZ2xlIHRva2VuIHN0cmluZywgd2l0aCB0aGUgZGVsaW1pdGVycyBpbmNsdWRlZDsKICAgIG90aGVyd2lzZSwgdGhlIG1hdGNoaW5nIHRva2VucyBhcmUgcmV0dXJuZWQgYXMgYSBsaXN0IG9mIHRva2VucywKICAgIHdpdGggdGhlIGRlbGltaXRlcnMgc3VwcHJlc3NlZC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgZGVsaW1pdGVkTGlzdChXb3JkKGFscGhhcykpLnBhcnNlU3RyaW5nKCJhYSxiYixjYyIpICMgLT4gWydhYScsICdiYicsICdjYyddCiAgICAgICAgZGVsaW1pdGVkTGlzdChXb3JkKGhleG51bXMpLCBkZWxpbT0nOicsIGNvbWJpbmU9VHJ1ZSkucGFyc2VTdHJpbmcoIkFBOkJCOkNDOkREOkVFIikgIyAtPiBbJ0FBOkJCOkNDOkREOkVFJ10KICAgIHoCIFty5AAAAHoEXS4uLk4pBXKlAAAAciYAAAByTwAAAHLSAQAAckgAAAApBHKVAQAA2gVkZWxpbdoHY29tYmluZdoGZGxOYW1lchIAAAByEgAAAHITAAAAcl4AAADRFAAAcwgAAAAADyQBBAEaAmMCAAAAAAAAAAMAAAAFAAAAAwAAAHNqAAAAdACDAIkAhwCHAWYCZAFkAoQIfQJ8AWQDawhyMHQBdAKDAaADZARkBYQAoQF9AW4IfAGgBKEAfQF8AaAFZAahAQEAfAFqBnwCZAdkCI0CAQB8AYgAFwCgBWQJdAeIAYMBFwBkChcAoQFTACkLYT4DAABIZWxwZXIgdG8gZGVmaW5lIGEgY291bnRlZCBsaXN0IG9mIGV4cHJlc3Npb25zLgoKICAgIFRoaXMgaGVscGVyIGRlZmluZXMgYSBwYXR0ZXJuIG9mIHRoZSBmb3JtOjoKCiAgICAgICAgaW50ZWdlciBleHByIGV4cHIgZXhwci4uLgoKICAgIHdoZXJlIHRoZSBsZWFkaW5nIGludGVnZXIgdGVsbHMgaG93IG1hbnkgZXhwciBleHByZXNzaW9ucyBmb2xsb3cuCiAgICBUaGUgbWF0Y2hlZCB0b2tlbnMgcmV0dXJucyB0aGUgYXJyYXkgb2YgZXhwciB0b2tlbnMgYXMgYSBsaXN0IC0gdGhlCiAgICBsZWFkaW5nIGNvdW50IHRva2VuIGlzIHN1cHByZXNzZWQuCgogICAgSWYgYGBpbnRFeHByYGAgaXMgc3BlY2lmaWVkLCBpdCBzaG91bGQgYmUgYSBweXBhcnNpbmcgZXhwcmVzc2lvbgogICAgdGhhdCBwcm9kdWNlcyBhbiBpbnRlZ2VyIHZhbHVlLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBjb3VudGVkQXJyYXkoV29yZChhbHBoYXMpKS5wYXJzZVN0cmluZygnMiBhYiBjZCBlZicpICAjIC0+IFsnYWInLCAnY2QnXQoKICAgICAgICAjIGluIHRoaXMgcGFyc2VyLCB0aGUgbGVhZGluZyBpbnRlZ2VyIHZhbHVlIGlzIGdpdmVuIGluIGJpbmFyeSwKICAgICAgICAjICcxMCcgaW5kaWNhdGluZyB0aGF0IDIgdmFsdWVzIGFyZSBpbiB0aGUgYXJyYXkKICAgICAgICBiaW5hcnlDb25zdGFudCA9IFdvcmQoJzAxJykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHQ6IGludCh0WzBdLCAyKSkKICAgICAgICBjb3VudGVkQXJyYXkoV29yZChhbHBoYXMpLCBpbnRFeHByPWJpbmFyeUNvbnN0YW50KS5wYXJzZVN0cmluZygnMTAgYWIgY2QgZWYnKSAgIyAtPiBbJ2FiJywgJ2NkJ10KICAgIGMDAAAAAAAAAAQAAAAFAAAAEwAAAHMuAAAAfAJkARkAfQOIAHwDciB0AHQBiAFnAXwDFACDAYMBcCZ0AHQCgwE+AAEAZwBTACkCTnIBAAAAKQNyLQAAAHIiAAAAcmEAAAApBHKrAAAAcrwAAABylwAAAHI5AgAAKQLaCWFycmF5RXhwcnKVAQAAchIAAAByEwAAANoVY291bnRGaWVsZFBhcnNlQWN0aW9u/hQAAHMGAAAAAAEIASIBeitjb3VudGVkQXJyYXkuPGxvY2Fscz4uY291bnRGaWVsZFBhcnNlQWN0aW9uTmMBAAAAAAAAAAEAAAADAAAAUwAAAHMMAAAAdAB8AGQBGQCDAVMAKQJOcgEAAAApAXKWAAAAKQFylwAAAHISAAAAchIAAAByEwAAAHKYAAAAAxUAAHKZAAAAeh5jb3VudGVkQXJyYXkuPGxvY2Fscz4uPGxhbWJkYT7aCGFycmF5TGVuVCkBcs0BAAB6BihsZW4pIHoDLi4uKQhyKwAAAHJMAAAAcnAAAAByoQAAAHJSAQAActIBAABy5wEAAHKlAAAAKQNylQEAANoHaW50RXhwcnI+AwAAchIAAAApAnI9AwAAcpUBAAByEwAAAHJaAAAA5hQAAHMQAAAAABcGAQ4ECAEUAggBCgEOAWMBAAAAAAAAAAMAAAAFAAAAQwAAAHM6AAAAZwB9AXgwfABEAF0ofQJ0AHwCdAGDAnIofAGgAnQDfAKDAaEBAQBxCnwBoAR8AqEBAQBxClcAfAFTACkBTikFcpoAAAByGgEAAHJPAQAAcikCAABy7QAAACkD2gFMcqQAAABy/AAAAHISAAAAchIAAAByEwAAAHIpAgAAChUAAHMMAAAAAAEEAQoBCgEQAg4BcikCAABjAQAAAAAAAAACAAAABQAAAAMAAABzNgAAAHQAgwCJAIcAZgFkAWQChAh9AXwAagF8AWQDZASNAgEAiACgAmQFdAN8AIMBFwChAQEAiABTACkGYTQCAABIZWxwZXIgdG8gZGVmaW5lIGFuIGV4cHJlc3Npb24gdGhhdCBpcyBpbmRpcmVjdGx5IGRlZmluZWQgZnJvbQogICAgdGhlIHRva2VucyBtYXRjaGVkIGluIGEgcHJldmlvdXMgZXhwcmVzc2lvbiwgdGhhdCBpcywgaXQgbG9va3MgZm9yCiAgICBhICdyZXBlYXQnIG9mIGEgcHJldmlvdXMgZXhwcmVzc2lvbi4gIEZvciBleGFtcGxlOjoKCiAgICAgICAgZmlyc3QgPSBXb3JkKG51bXMpCiAgICAgICAgc2Vjb25kID0gbWF0Y2hQcmV2aW91c0xpdGVyYWwoZmlyc3QpCiAgICAgICAgbWF0Y2hFeHByID0gZmlyc3QgKyAiOiIgKyBzZWNvbmQKCiAgICB3aWxsIG1hdGNoIGBgIjE6MSJgYCwgYnV0IG5vdCBgYCIxOjIiYGAuICBCZWNhdXNlIHRoaXMKICAgIG1hdGNoZXMgYSBwcmV2aW91cyBsaXRlcmFsLCB3aWxsIGFsc28gbWF0Y2ggdGhlIGxlYWRpbmcKICAgIGBgIjE6MSJgYCBpbiBgYCIxOjEwImBgLiBJZiB0aGlzIGlzIG5vdCBkZXNpcmVkLCB1c2UKICAgIDpjbGFzczpgbWF0Y2hQcmV2aW91c0V4cHJgLiBEbyAqbm90KiB1c2Ugd2l0aCBwYWNrcmF0IHBhcnNpbmcKICAgIGVuYWJsZWQuCiAgICBjAwAAAAAAAAAEAAAABAAAABMAAABzUAAAAHwCckJ0AHwCgwFkAWsCch6IAHwCZAIZAD4AAQBxTHQBfAKgAqEAgwF9A4gAdANkA2QEhAB8A0QAgwGDAT4AAQBuCogAdASDAD4AAQBkAFMAKQVOcqgAAAByAQAAAGMBAAAAAAAAAAIAAAADAAAAcwAAAHMWAAAAfABdDn0BdAB8AYMBVgABAHECZABTACkBTikBcjEAAAApAnIVAAAA2gJ0dHISAAAAchIAAAByEwAAAHKnAAAAKhUAAHMCAAAABAB6RG1hdGNoUHJldmlvdXNMaXRlcmFsLjxsb2NhbHM+LmNvcHlUb2tlblRvUmVwZWF0ZXIuPGxvY2Fscz4uPGdlbmV4cHI+KQVy0wAAAHIpAgAAchIBAAByIgAAAHIpAAAAKQRyqwAAAHK8AAAAcpcAAADaBXRmbGF0KQHaA3JlcHISAAAAchMAAADaE2NvcHlUb2tlblRvUmVwZWF0ZXIjFQAAcwwAAAAAAQQBDAEOAwwBGAJ6MW1hdGNoUHJldmlvdXNMaXRlcmFsLjxsb2NhbHM+LmNvcHlUb2tlblRvUmVwZWF0ZXJUKQFyzQEAAHoHKHByZXYpICkEcisAAABy5wEAAHLSAQAAcqUAAAApAnKVAQAAckUDAAByEgAAACkBckQDAAByEwAAAHJtAAAAExUAAHMKAAAAAA8GAQwKDgESAWMBAAAAAAAAAAMAAAAFAAAAAwAAAHNGAAAAdACDAIkAfACgAaEAfQGIAHwBSwCJAIcAZgFkAWQChAh9AnwAagJ8AmQDZASNAgEAiACgA2QFdAR8AIMBFwChAQEAiABTACkGYVQCAABIZWxwZXIgdG8gZGVmaW5lIGFuIGV4cHJlc3Npb24gdGhhdCBpcyBpbmRpcmVjdGx5IGRlZmluZWQgZnJvbQogICAgdGhlIHRva2VucyBtYXRjaGVkIGluIGEgcHJldmlvdXMgZXhwcmVzc2lvbiwgdGhhdCBpcywgaXQgbG9va3MgZm9yCiAgICBhICdyZXBlYXQnIG9mIGEgcHJldmlvdXMgZXhwcmVzc2lvbi4gIEZvciBleGFtcGxlOjoKCiAgICAgICAgZmlyc3QgPSBXb3JkKG51bXMpCiAgICAgICAgc2Vjb25kID0gbWF0Y2hQcmV2aW91c0V4cHIoZmlyc3QpCiAgICAgICAgbWF0Y2hFeHByID0gZmlyc3QgKyAiOiIgKyBzZWNvbmQKCiAgICB3aWxsIG1hdGNoIGBgIjE6MSJgYCwgYnV0IG5vdCBgYCIxOjIiYGAuICBCZWNhdXNlIHRoaXMKICAgIG1hdGNoZXMgYnkgZXhwcmVzc2lvbnMsIHdpbGwgKm5vdCogbWF0Y2ggdGhlIGxlYWRpbmcgYGAiMToxImBgCiAgICBpbiBgYCIxOjEwImBgOyB0aGUgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCBmaXJzdCwgYW5kIHRoZW4KICAgIGNvbXBhcmVkLCBzbyBgYCIxImBgIGlzIGNvbXBhcmVkIHdpdGggYGAiMTAiYGAuIERvICpub3QqIHVzZQogICAgd2l0aCBwYWNrcmF0IHBhcnNpbmcgZW5hYmxlZC4KICAgIGMDAAAAAAAAAAQAAAAEAAAAEwAAAHMqAAAAdAB8AqABoQCDAYkAhwBmAWQBZAKECH0DiAFqAnwDZANkBI0CAQBkAFMAKQVOYwMAAAAAAAAABAAAAAQAAAATAAAAcyQAAAB0AHwCoAGhAIMBfQN8A4gAawNyIHQCZAFkAmQBgwOCAWQAUwApA05ytwAAAHIBAAAAKQNyKQIAAHISAQAAcjwAAAApBHKrAAAAcrwAAABylwAAANoLdGhlc2VUb2tlbnMpAdoLbWF0Y2hUb2tlbnNyEgAAAHITAAAA2hRtdXN0TWF0Y2hUaGVzZVRva2Vuc0UVAABzBgAAAAABDAEIAXpMbWF0Y2hQcmV2aW91c0V4cHIuPGxvY2Fscz4uY29weVRva2VuVG9SZXBlYXRlci48bG9jYWxzPi5tdXN0TWF0Y2hUaGVzZVRva2Vuc1QpAXLNAQAAKQNyKQIAAHISAQAAcqEAAAApBHKrAAAAcrwAAABylwAAAHJIAwAAKQFyRAMAACkBckcDAAByEwAAAHJFAwAAQxUAAHMGAAAAAAEMAQwEei5tYXRjaFByZXZpb3VzRXhwci48bG9jYWxzPi5jb3B5VG9rZW5Ub1JlcGVhdGVyVCkBcs0BAAB6ByhwcmV2KSApBXIrAAAAclIBAABy5wEAAHLSAQAAcqUAAAApA3KVAQAA2gJlMnJFAwAAchIAAAApAXJEAwAAchMAAABybAAAADEVAABzDgAAAAAPBgEIAQgBDAcOARIBYwEAAAAAAAAAAgAAAAYAAABDAAAAcz4AAAB4HGQBRABdFH0BfACgAHwBdAF8ARcAoQJ9AHEGVwB8AKAAZAJkA6ECfQB8AKAAZARkBaECfQB0AnwAgwFTACkGTnoFXF4tW11y6gAAAHoCXG5yzgIAAHoCXHQpA3KuAAAA2gdfYnNsYXNocqUAAAApAnKrAAAAcroAAAByEgAAAHISAAAAchMAAAByogIAAE4VAABzCgAAAAACCgEUAQwBDAFyogIAAGMEAAAAAAAAAAsAAAAIAAAAAwAAAHP2AQAAdAB8AXQBgwJyGHQCagNkAWQCZAONAgEAfAFyOmQEZAWEAH0EZAZkBYQAfQV8A3I0dARuAnQFiQBuHGQHZAWEAH0EZAhkBYQAfQV8A3JSdAZuAnQHiQBnAH0GdAB8AHQBgwJybnwAoAihAH0GbiR0AHwAdAmDAnKCdAp8AIMBfQZuEHQCagNkCXQLZAJkA40DAQB8BnOcdAyDAFMAfAOQAXMyZAp9B3iKfAd0DXwGgwFkCxgAawCQAXIwfAZ8BxkAfQh4anQOfAZ8B2QLFwBkDIUCGQCDAUQAXUpcAn0JfQp8BHwKfAiDAnL8fAZ8B3wJFwBkCxcAPQBQAHHYfAV8CHwKgwJy2HwGfAd8CRcAZAsXAD0AfAagD3wHfAqhAgEAUABx2FcAfAdkCzcAfQdxqFcAfAGQAXPUfAOQAXPUfAKQAXLUeWh0DXwGgwF0DWQNoBB8BqEBgwFrApABcoZ0EWQOZA2gEGQPZBCEAHwGRACDAaEBFgCDAaASZBGgEHwGoQGhAVMAdBFkEqAQZBNkEIQAfAZEAIMBoQGDAaASZBGgEHwGoQGhAVMAVwBuJgQAdBNrCpABctIBAAEAAQB0AmoDZBR0C2QCZAONAwEAWQBuAlgAdBSHAGYBZBVkEIQIfAZEAIMBgwGgEmQRoBB8BqEBoQFTACkWYYMEAABIZWxwZXIgdG8gcXVpY2tseSBkZWZpbmUgYSBzZXQgb2YgYWx0ZXJuYXRpdmUgTGl0ZXJhbHMsIGFuZCBtYWtlcwogICAgc3VyZSB0byBkbyBsb25nZXN0LWZpcnN0IHRlc3Rpbmcgd2hlbiB0aGVyZSBpcyBhIGNvbmZsaWN0LAogICAgcmVnYXJkbGVzcyBvZiB0aGUgaW5wdXQgb3JkZXIsIGJ1dCByZXR1cm5zCiAgICBhIDpjbGFzczpgTWF0Y2hGaXJzdGAgZm9yIGJlc3QgcGVyZm9ybWFuY2UuCgogICAgUGFyYW1ldGVyczoKCiAgICAgLSBzdHJzIC0gYSBzdHJpbmcgb2Ygc3BhY2UtZGVsaW1pdGVkIGxpdGVyYWxzLCBvciBhIGNvbGxlY3Rpb24gb2YKICAgICAgIHN0cmluZyBsaXRlcmFscwogICAgIC0gY2FzZWxlc3MgLSAoZGVmYXVsdD0gYGBGYWxzZWBgKSAtIHRyZWF0IGFsbCBsaXRlcmFscyBhcwogICAgICAgY2FzZWxlc3MKICAgICAtIHVzZVJlZ2V4IC0gKGRlZmF1bHQ9IGBgVHJ1ZWBgKSAtIGFzIGFuIG9wdGltaXphdGlvbiwgd2lsbAogICAgICAgZ2VuZXJhdGUgYSBSZWdleCBvYmplY3Q7IG90aGVyd2lzZSwgd2lsbCBnZW5lcmF0ZQogICAgICAgYSA6Y2xhc3M6YE1hdGNoRmlyc3RgIG9iamVjdCAoaWYgYGBjYXNlbGVzcz1UcnVlYGAgb3IgYGBhc0tleXdvcmQ9VHJ1ZWBgLCBvciBpZgogICAgICAgY3JlYXRpbmcgYSA6Y2xhc3M6YFJlZ2V4YCByYWlzZXMgYW4gZXhjZXB0aW9uKQogICAgIC0gYXNLZXl3b3JkIC0gKGRlZmF1bHQ9YGBGYWxzZWBgKSAtIGVuZm9yY2UgS2V5d29yZC1zdHlsZSBtYXRjaGluZyBvbiB0aGUKICAg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cmVzcGVjdGl2ZSBwYXR0ZXJucyBmb3IgdGhlIGtleSBhbmQgdmFsdWUuICBUYWtlcyBjYXJlIG9mCiAgICBkZWZpbmluZyB0aGUgOmNsYXNzOmBEaWN0YCwgOmNsYXNzOmBaZXJvT3JNb3JlYCwgYW5kCiAgICA6Y2xhc3M6YEdyb3VwYCB0b2tlbnMgaW4gdGhlIHByb3BlciBvcmRlci4gIFRoZSBrZXkgcGF0dGVybgogICAgY2FuIGluY2x1ZGUgZGVsaW1pdGluZyBtYXJrZXJzIG9yIHB1bmN0dWF0aW9uLCBhcyBsb25nIGFzIHRoZXkgYXJlCiAgICBzdXBwcmVzc2VkLCB0aGVyZWJ5IGxlYXZpbmcgdGhlIHNpZ25pZmljYW50IGtleSB0ZXh0LiAgVGhlIHZhbHVlCiAgICBwYXR0ZXJuIGNhbiBpbmNsdWRlIG5hbWVkIHJlc3VsdHMsIHNvIHRoYXQgdGhlIDpjbGFzczpgRGljdGAgcmVzdWx0cwogICAgY2FuIGluY2x1ZGUgbmFtZWQgdG9rZW4gZmllbGRzLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogbGlnaHQgYmx1ZSB0ZXh0dXJlOiBidXJsYXAiCiAgICAgICAgYXR0cl9leHByID0gKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKCiAgICAgICAgYXR0cl9sYWJlbCA9IGxhYmVsCiAgICAgICAgYXR0cl92YWx1ZSA9IFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKQoKICAgICAgICAjIHNpbWlsYXIgdG8gRGljdCwgYnV0IHNpbXBsZXIgY2FsbCBmb3JtYXQKICAgICAgICByZXN1bHQgPSBkaWN0T2YoYXR0cl9sYWJlbCwgYXR0cl92YWx1ZSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIHByaW50KHJlc3VsdFsnc2hhcGUnXSkKICAgICAgICBwcmludChyZXN1bHQuc2hhcGUpICAjIG9iamVjdCBhdHRyaWJ1dGUgYWNjZXNzIHdvcmtzIHRvbwogICAgICAgIHByaW50KHJlc3VsdC5hc0RpY3QoKSkKCiAgICBwcmludHM6OgoKICAgICAgICBbWydzaGFwZScsICdTUVVBUkUnXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXSwgWydjb2xvcicsICdsaWdodCBibHVlJ10sIFsndGV4dHVyZScsICdidXJsYXAnXV0KICAgICAgICAtIGNvbG9yOiBsaWdodCBibHVlCiAgICAgICAgLSBwb3NuOiB1cHBlciBsZWZ0CiAgICAgICAgLSBzaGFwZTogU1FVQVJFCiAgICAgICAgLSB0ZXh0dXJlOiBidXJsYXAKICAgICAgICBTUVVBUkUKICAgICAgICBTUVVBUkUKICAgICAgICB7J2NvbG9yJzogJ2xpZ2h0IGJsdWUnLCAnc2hhcGUnOiAnU1FVQVJFJywgJ3Bvc24nOiAndXBwZXIgbGVmdCcsICd0ZXh0dXJlJzogJ2J1cmxhcCd9CiAgICApA3InAAAAcjYAAAByLQAAACkCckkBAAByMQEAAHISAAAAchIAAAByEwAAAHJfAAAArRUAAHMCAAAAACVjAgAAAAAAAAAGAAAABAAAAEMAAABzXgAAAHQAgwCgAWQBZAKEAKEBfQJ8AqACoQB9A2QDfANfA3wCZASDAXwAFwB8A2QFgwEXAH0EfAFyQGQGZAKEAH0FbghkB2QIhAB9BXwEoAF8BaEBAQB8AGoEfARfBHwEUwApCWGXBAAASGVscGVyIHRvIHJldHVybiB0aGUgb3JpZ2luYWwsIHVudG9rZW5pemVkIHRleHQgZm9yIGEgZ2l2ZW4KICAgIGV4cHJlc3Npb24uICBVc2VmdWwgdG8gcmVzdG9yZSB0aGUgcGFyc2VkIGZpZWxkcyBvZiBhbiBIVE1MIHN0YXJ0CiAgICB0YWcgaW50byB0aGUgcmF3IHRhZyB0ZXh0IGl0c2VsZiwgb3IgdG8gcmV2ZXJ0IHNlcGFyYXRlIHRva2VucyB3aXRoCiAgICBpbnRlcnZlbmluZyB3aGl0ZXNwYWNlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIG1hdGNoaW5nIGlucHV0IHRleHQuIEJ5CiAgICBkZWZhdWx0LCByZXR1cm5zIGFzdHJpbmcgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcGFyc2VkIHRleHQuCgogICAgSWYgdGhlIG9wdGlvbmFsIGBgYXNTdHJpbmdgYCBhcmd1bWVudCBpcyBwYXNzZWQgYXMKICAgIGBgRmFsc2VgYCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzCiAgICBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBjb250YWluaW5nIGFueSByZXN1bHRzIG5hbWVzIHRoYXQKICAgIHdlcmUgb3JpZ2luYWxseSBtYXRjaGVkLCBhbmQgYSBzaW5nbGUgdG9rZW4gY29udGFpbmluZyB0aGUgb3JpZ2luYWwKICAgIG1hdGNoZWQgdGV4dCBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuICBTbyBpZiB0aGUgZXhwcmVzc2lvbiBwYXNzZWQgdG8KICAgIDpjbGFzczpgb3JpZ2luYWxUZXh0Rm9yYCBjb250YWlucyBleHByZXNzaW9ucyB3aXRoIGRlZmluZWQKICAgIHJlc3VsdHMgbmFtZXMsIHlvdSBtdXN0IHNldCBgYGFzU3RyaW5nYGAgdG8gYGBGYWxzZWBgIGlmIHlvdQogICAgd2FudCB0byBwcmVzZXJ2ZSB0aG9zZSByZXN1bHRzIG5hbWUgdmFsdWVzLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBzcmMgPSAidGhpcyBpcyB0ZXN0IDxiPiBib2xkIDxpPnRleHQ8L2k+IDwvYj4gbm9ybWFsIHRleHQgIgogICAgICAgIGZvciB0YWcgaW4gKCJiIiwgImkiKToKICAgICAgICAgICAgb3BlbmVyLCBjbG9zZXIgPSBtYWtlSFRNTFRhZ3ModGFnKQogICAgICAgICAgICBwYXR0ID0gb3JpZ2luYWxUZXh0Rm9yKG9wZW5lciArIFNraXBUbyhjbG9zZXIpICsgY2xvc2VyKQogICAgICAgICAgICBwcmludChwYXR0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biBpbnRlZ2VyIHVzaW5nIGJhc2UgMTYuCgogICAgRXhhbXBsZSAoY29tcGFyZSB0aGUgbGFzdCB0byBleGFtcGxlIGluIDpjbGFzczpgUGFyc2VyRWxlbWVudC50cmFuc2Zvcm1TdHJpbmdgOjoKCiAgICAgICAgaGV4X2ludHMgPSBPbmVPck1vcmUoV29yZChoZXhudW1zKSkuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoaW50LCAxNikpCiAgICAgICAgaGV4X2ludHMucnVuVGVzdHMoJycnCiAgICAgICAgICAgIDAwIDExIDIyIGFhIEZGIDBhIDBkIDFhCiAgICAgICAgICAgICcnJykKCiAgICAgICAgdXBwZXJ3b3JkID0gV29yZChhbHBoYXMpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHN0ci51cHBlcikpCiAgICAgICAgT25lT3JNb3JlKHVwcGVyd29yZCkucnVuVGVzdHMoJycnCiAgICAgICAgICAgIG15IGtpbmdkb20gZm9yIGEgaG9yc2UKICAgICAgICAgICAgJycnKQoKICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIudGl0bGUpKQogICAgICAgIE9uZU9yTW9yZSh3ZCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pLnJ1blRlc3RzKCcnJwogICAgICAgICAgICBub3cgaXMgdGhlIHdpbnRlciBvZiBvdXIgZGlzY29udGVudCBtYWRlIGdsb3Jpb3VzIHN1bW1lciBieSB0aGlzIHN1biBvZiB5b3JrCiAgICAgICAgICAgICcnJykKCiAgICBwcmludHM6OgoKICAgICAgICAwMCAxMSAyMiBhYSBGRiAwYSAwZCAxYQogICAgICAgIFswLCAxNywgMzQsIDE3MCwgMjU1LCAxMCwgMTMsIDI2XQoKICAgICAgICBteSBraW5nZG9tIGZvciBhIGhvcnNlCiAgICAgICAgWydNWScsICdLSU5HRE9NJywgJ0ZPUicsICdBJywgJ0hPUlNFJ10KCiAgICAgICAgbm93IGlzIHRoZSB3aW50ZXIgb2Ygb3VyIGRpc2NvbnRlbnQgbWFkZSBnbG9yaW91cyBzdW1tZXIgYnkgdGhpcyBzdW4gb2YgeW9yawogICAgICAgIFsnTm93IElzIFRoZSBXaW50ZXIgT2YgT3VyIERpc2NvbnRlbnQgTWFkZSBHbG9yaW91cyBTdW1tZXIgQnkgVGhpcyBTdW4gT2YgWW9yayddCiAgICBjAwAAAAAAAAADAAAAAwAAABMAAABzFAAAAIcAhwFmAmQBZAKECHwCRACDAVMAKQNOYwEAAAAAAAAAAgAAAAUAAAATAAAAcxoAAABnAHwAXRJ9AYgBfAFmAYgAngKOAJECcQRTAHISAAAAchIAAAApAnIVAAAA2gR0b2tuKQJyxwAAAHKcAQAAchIAAAByEwAAAHIXAAAAmxYAAHMCAAAABgB6KHRva2VuTWFwLjxsb2NhbHM+LnBhLjxsb2NhbHM+LjxsaXN0Y29tcD5yEgAAACkDcqsAAAByvAAAAHKXAAAAKQJyxwAAAHKcAQAAchIAAAByEwAAAHLAAAAAmhYAAHMCAAAAAAF6FHRva2VuTWFwLjxsb2NhbHM+LnBhcg8AAAByrgEAACkEcrABAAByDwAAAHKIAQAAcpwAAAApBHKcAQAAcscAAABywAAAAHKzAQAAchIAAAApAnLHAAAAcpwBAAByEwAAAHKLAAAAdhYAAHMQAAAAACQOAwIBBgESAQ4BDgEGAmMBAAAAAAAAAAEAAAACAAAAQwAAAHMMAAAAdAB8AIMBoAGhAFMAKQFOKQJypQAAAHKJAgAAKQFylwAAAHISAAAAchIAAAByEwAAAHKYAAAAphYAAHKZAAAAYwEAAAAAAAAAAQAAAAIAAABDAAAAcwwAAAB0AHwAgwGgAaEAUwApAU4pAnKlAAAA2gVsb3dlcikBcpcAAAByEgAAAHISAAAAchMAAABymAAAAKoWAABymQAAAHJoAQAAcmkBAABjBAAAAAAAAAAIAAAACAAAAAMAAABzfgEAAHQAfAB0AYMCch58AIkAdAJ8AHwBDABkAY0CfQBuBnwAagOJAHQEdAV0BmQCFwCDAn0EfAFyjnQHoAihAKAJdAqhAX0FfAJ8AGQDgwEXAHQLdAx0DXwEdA5kBIMBFwB8BRcAgwGDAYMBFwB0D2QFZAZnAWQHjQJkCIMBoAlkCWQKhAChARcAfAMXAH0Gbmx0EKAIoQCgCXQKoQF0BHQRZAtkDI0CQgB9BXwCfABkA4MBFwB0C3QMdA18BKAJdBKhAXQPdA5kBIMBfAUXAIMBFwCDAYMBgwEXAHQPZAVkBmcBZAeNAmQIgwGgCWQNZAqEAKEBFwB8AxcAfQZ0E3QUZA6DAXwAFwBkCxcAZAZkD40CfQd8BqAVZBCIABYAoQEBAHwGoBaHAGYBZBFkCoQIoQEBAHwHZBJkE6AXiACgGGQUZBWhAqAZoQCgGqEAoQEXAIMBoBVkFogAFgChAX0HiAB8Bl8biAB8B18bdBx8B4MAgwF8Bl8dfAZ8B2YCUwApF3pSSW50ZXJuYWwgaGVscGVyIHRvIGNvbnN0cnVjdCBvcGVuaW5nIGFuZCBjbG9zaW5nIHRhZyBleHByZXNzaW9ucywgZ2l2ZW4gYSB0YWcgbmFtZSkBcogCAAB6A18tOtoDdGFn+gE9+gEvRikBckQBAAByYQAAAGMDAAAAAAAAAAMAAAACAAAAUwAAAHMMAAAAfAJkARkAZAJrAlMAKQNOcgEAAABybwMAAHISAAAAKQNyqwAAAHK8AAAAcpcAAAByEgAAAHISAAAAchMAAABymAAAAL4WAABymQAAAHobX21ha2VUYWdzLjxsb2NhbHM+LjxsYW1iZGE+cmkBAAApAXKZAgAAYwMAAAAAAAAAAwAAAAIAAABTAAAAcwwAAAB8AmQBGQBkAmsCUwApA05yAQAAAHJvAwAAchIAAAApA3KrAAAAcrwAAABylwAAAHISAAAAchIAAAByEwAAAHKYAAAAxhYAAHKZAAAAegI8LykBcisDAAB6BDwlcz5jAQAAAAAAAAABAAAACQAAABMAAABzKgAAAHwAoABkAWQCoAGIAKACZANkBKECoAOhAKAEoQChARcAfACgBaEAoQJTACkFTnKSAgAAcrcAAAD6ATpy5AAAACkGcigBAABy2AAAAHKuAAAA2gV0aXRsZXKsAAAAclIBAAApAXKXAAAAKQHaB3Jlc25hbWVyEgAAAHITAAAAcpgAAADMFgAAcpkAAAByrwIAAHK3AAAAcnADAABy5AAAAHoFPC8lcz4pHnKaAAAAch8BAAByLgAAAHIRAQAAckwAAAByUgAAAHJRAAAAclwAAAByUgEAAHKhAAAAcngAAAByJwAAAHJPAAAAci0AAABySAAAAHI4AAAAcncAAABydAAAAHJgAAAAciYAAADaAl9MctIBAABy5wEAAHLYAAAAcq4AAABycQMAAHKsAAAAcm0DAAByRQAAANoIdGFnX2JvZHkpCNoGdGFnU3Ry2gN4bWzaC3N1cHByZXNzX0xU2gtzdXBwcmVzc19HVNoLdGFnQXR0ck5hbWXaDHRhZ0F0dHJWYWx1ZdoHb3BlblRhZ9oIY2xvc2VUYWdyEgAAACkBcnIDAAByEwAAANoJX21ha2VUYWdzrhYAAHMkAAAAAAQKAQQBEAIGAg4BBAEOBUoCGgZSARgCDgISASwBBgEGAQwBcn0DAABjAQAAAAAAAAABAAAAAwAAAEMAAABzCgAAAHQAfABkAYMCUwApAmFLAwAASGVscGVyIHRvIGNvbnN0cnVjdCBvcGVuaW5nIGFuZCBjbG9zaW5nIHRhZyBleHByZXNzaW9ucyBmb3IgSFRNTCwKICAgIGdpdmVuIGEgdGFnIG5hbWUuIE1hdGNoZXMgdGFncyBpbiBlaXRoZXIgdXBwZXIgb3IgbG93ZXIgY2FzZSwKICAgIGF0dHJpYnV0ZXMgd2l0aCBuYW1lc3BhY2VzIGFuZCB3aXRoIHF1b3RlZCBvciB1bnF1b3RlZCB2YWx1ZXMuCgogICAgRXhhbXBsZTo6CgogICAgICAgIHRleHQgPSAnPHRkPk1vcmUgaW5mbyBhdCB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3B5cGFyc2luZy9weXBhcnNpbmcvd2lraSI+cHlwYXJzaW5nPC9hPiB3aWtpIHBhZ2U8L3RkPicKICAgICAgICAjIG1ha2VIVE1MVGFncyByZXR1cm5zIHB5cGFyc2luZyBleHByZXNzaW9ucyBmb3IgdGhlIG9wZW5pbmcgYW5kCiAgICAgICAgIyBjbG9zaW5nIHRhZ3MgYXMgYSAyLXR1cGxlCiAgICAgICAgYSwgYV9lbmQgPSBtYWtlSFRNTFRhZ3MoIkEiKQogICAgICAgIGxpbmtfZXhwciA9IGEgKyBTa2lwVG8oYV9lbmQpKCJsaW5rX3RleHQiKSArIGFfZW5kCgogICAgICAgIGZvciBsaW5rIGluIGxpbmtfZXhwci5zZWFyY2hTdHJpbmcodGV4dCk6CiAgICAgICAgICAgICMgYXR0cmlidXRlcyBpbiB0aGUgPEE+IHRhZyAobGlrZSAiaHJlZiIgc2hvd24gaGVyZSkgYXJlCiAgICAgICAgICAgICMgYWxzbyBhY2Nlc3NpYmxlIGFzIG5hbWVkIHJlc3VsdHMKICAgICAgICAgICAgcHJpbnQobGluay5saW5rX3RleHQsICctPicsIGxpbmsuaHJlZikKCiAgICBwcmludHM6OgoKICAgICAgICBweXBhcnNpbmcgLT4gaHR0cHM6Ly9naXRodWIuY29tL3B5cGFyc2luZy9weXBhcnNpbmcvd2lraQogICAgRikBcn0DAAApAXJ1AwAAchIAAAByEgAAAHITAAAAcmkAAADTFgAAcwIAAAAAFmMBAAAAAAAAAAEAAAADAAAAQwAAAHMKAAAAdAB8AGQBgwJTACkCertIZWxwZXIgdG8gY29uc3RydWN0IG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFnIGV4cHJlc3Npb25zIGZvciBYTUwsCiAgICBnaXZlbiBhIHRhZyBuYW1lLiBNYXRjaGVzIHRhZ3Mgb25seSBpbiB0aGUgZ2l2ZW4gdXBwZXIvbG93ZXIgY2FzZS4KCiAgICBFeGFtcGxlOiBzaW1pbGFyIHRvIDpjbGFzczpgbWFrZUhUTUxUYWdzYAogICAgVCkBcn0DAAApAXJ1AwAAchIAAAByEgAAAHITAAAAcmoAAADrFgAAcwIAAAAABmMAAAAAAAAAAAMAAAADAAAADwAAAHM4AAAAfAByEnwAZAFkAYUCGQCJAG4IfAGgAKEAiQBkAmQDhACIAEQAgwGJAIcAZgFkBGQFhAh9AnwCUwApBmE3CAAASGVscGVyIHRvIGNyZWF0ZSBhIHZhbGlkYXRpbmcgcGFyc2UgYWN0aW9uIHRvIGJlIHVzZWQgd2l0aCBzdGFydAogICAgdGFncyBjcmVhdGVkIHdpdGggOmNsYXNzOmBtYWtlWE1MVGFnc2Agb3IKICAgIDpjbGFzczpgbWFrZUhUTUxUYWdzYC4gVXNlIGBgd2l0aEF0dHJpYnV0ZWBgIHRvIHF1YWxpZnkKICAgIGEgc3RhcnRpbmcgdGFnIHdpdGggYSByZXF1aXJlZCBhdHRyaWJ1dGUgdmFsdWUsIHRvIGF2b2lkIGZhbHNlCiAgICBtYXRjaGVzIG9uIGNvbW1vbiB0YWdzIHN1Y2ggYXMgYGA8VEQ+YGAgb3IgYGA8RElWPmBgLgoKICAgIENhbGwgYGB3aXRoQXR0cmlidXRlYGAgd2l0aCBhIHNlcmllcyBvZiBhdHRyaWJ1dGUgbmFtZXMgYW5kCiAgICB2YWx1ZXMuIFNwZWNpZnkgdGhlIGxpc3Qgb2YgZmlsdGVyIGF0dHJpYnV0ZXMgbmFtZXMgYW5kIHZhbHVlcyBhczoKCiAgICAgLSBrZXl3b3JkIGFyZ3VtZW50cywgYXMgaW4gYGAoYWxpZ249InJpZ2h0IilgYCwgb3IKICAgICAtIGFzIGFuIGV4cGxpY2l0IGRpY3Qgd2l0aCBgYCoqYGAgb3BlcmF0b3IsIHdoZW4gYW4gYXR0cmlidXRlCiAgICAgICBuYW1lIGlzIGFsc28gYSBQeXRob24gcmVzZXJ2ZWQgd29yZCwgYXMgaW4gYGAqKnsiY2xhc3MiOiJDdXN0b21lciIsICJhbGlnbiI6InJpZ2h0In1gYAogICAgIC0gYSBsaXN0IG9mIG5hbWUtdmFsdWUgdHVwbGVzLCBhcyBpbiBgYCgoIm5zMTpjbGFzcyIsICJDdXN0b21lciIpLCAoIm5zMjphbGlnbiIsICJyaWdodCIpKWBgCgogICAgRm9yIGF0dHJpYnV0ZSBuYW1lcyB3aXRoIGEgbmFtZXNwYWNlIHByZWZpeCwgeW91IG11c3QgdXNlIHRoZSBzZWNvbmQKICAgIGZvcm0uICBBdHRyaWJ1dGUgbmFtZXMgYXJlIG1hdGNoZWQgaW5zZW5zaXRpdmUgdG8gdXBwZXIvbG93ZXIgY2FzZS4KCiAgICBJZiBqdXN0IHRlc3RpbmcgZm9yIGBgY2xhc3NgYCAod2l0aCBvciB3aXRob3V0IGEgbmFtZXNwYWNlKSwgdXNlCiAgICA6Y2xhc3M6YHdpdGhDbGFzc2AuCgogICAgVG8gdmVyaWZ5IHRoYXQgdGhlIGF0dHJpYnV0ZSBleGlzdHMsIGJ1dCB3aXRob3V0IHNwZWNpZnlpbmcgYSB2YWx1ZSwKICAgIHBhc3MgYGB3aXRoQXR0cmlidXRlLkFOWV9WQUxVRWBgIGFzIHRoZSB2YWx1ZS4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgaHRtbCA9ICcnJwogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICBTb21lIHRleHQKICAgICAgICAgICAgPGRpdiB0eXBlPSJncmlkIj4xIDQgMCAxIDA8L2Rpdj4KICAgICAgICAgICAgPGRpdiB0eXBlPSJncmFwaCI+MSwzIDIsMyAxLDE8L2Rpdj4KICAgICAgICAgICAgPGRpdj50aGlzIGhhcyBubyB0eXBlPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAnJycKICAgICAgICBkaXYsZGl2X2VuZCA9IG1ha2VIVE1MVGFncygiZGl2IikKCiAgICAgICAgIyBvbmx5IG1hdGNoIGRpdiB0YWcgaGF2aW5nIGEgdHlwZSBhdHRyaWJ1dGUgd2l0aCB2YWx1ZSAiZ3JpZCIKICAgICAgICBkaXZfZ3JpZCA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhBdHRyaWJ1dGUodHlwZT0iZ3JpZCIpKQogICAgICAgIGdyaWRfZXhwciA9IGRpdl9ncmlkICsgU2tpcFRvKGRpdiB8IGRpdl9lbmQpKCJib2R5IikKICAgICAgICBmb3IgZ3JpZF9oZWFkZXIgaW4gZ3JpZF9leHByLnNlYXJjaFN0cmluZyhodG1sKToKICAgICAgICAgICAgcHJpbnQoZ3JpZF9oZWFkZXIuYm9keSkKCiAgICAgICAgIyBjb25zdHJ1Y3QgYSBtYXRjaCB3aXRoIGFueSBkaXYgdGFnIGhhdmluZyBhIHR5cGUgYXR0cmlidXRlLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZQogICAgICAgIGRpdl9hbnlfdHlwZSA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhBdHRyaWJ1dGUodHlwZT13aXRoQXR0cmlidXRlLkFOWV9WQUxVRSkpCiAgICAgICAgZGl2X2V4cHIgPSBkaXZfYW55X3R5cGUgKyBTa2lwVG8oZGl2IHwgZGl2X2VuZCkoImJvZHkiKQogICAgICAgIGZvciBkaXZfaGVhZGVyIGluIGRpdl9leHByLnNlYXJjaFN0cmluZyhodG1sKToKICAgICAgICAgICAgcHJpbnQoZGl2X2hlYWRlci5ib2R5KQoKICAgIHByaW50czo6CgogICAgICAgIDEgNCAwIDEgMAoKICAgICAgICAxIDQgMCAxIDAKICAgICAgICAxLDMgMiwzIDEsMQogICAgTmMB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cGFyZW50aGVzZXMgdG8gb3ZlcnJpZGUgb3BlcmF0b3IgcHJlY2VkZW5jZXMKICAgIChzZWUgZXhhbXBsZSBiZWxvdykuCgogICAgTm90ZTogaWYgeW91IGRlZmluZSBhIGRlZXAgb3BlcmF0b3IgbGlzdCwgeW91IG1heSBzZWUgcGVyZm9ybWFuY2UKICAgIGlzc3VlcyB3aGVuIHVzaW5nIGluZml4Tm90YXRpb24uIFNlZQogICAgOmNsYXNzOmBQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXRgIGZvciBhIG1lY2hhbmlzbSB0byBwb3RlbnRpYWxseQogICAgaW1wcm92ZSB5b3VyIHBhcnNlciBwZXJmb3JtYW5jZS4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gYmFzZUV4cHIgLSBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgbW9zdCBiYXNpYyBlbGVtZW50IGZvciB0aGUKICAgICAgIG5lc3RlZAogICAgIC0gb3BMaXN0IC0gbGlzdCBvZiB0dXBsZXMsIG9uZSBmb3IgZWFjaCBvcGVyYXRvciBwcmVjZWRlbmNlIGxldmVsCiAgICAgICBpbiB0aGUgZXhwcmVzc2lvbiBncmFtbWFyOyBlYWNoIHR1cGxlIGlzIG9mIHRoZSBmb3JtIGBgKG9wRXhwciwKICAgICAgIG51bVRlcm1zLCByaWdodExlZnRBc3NvYywgcGFyc2VBY3Rpb24pYGAsIHdoZXJlOgoKICAgICAgIC0gb3BFeHByIGlzIHRoZSBweXBhcnNpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9wZXJhdG9yOyBtYXkgYWxzbwogICAgICAgICBiZSBhIHN0cmluZywgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBMaXRlcmFsOyBpZiBudW1UZXJtcwogICAgICAgICBpcyAzLCBvcEV4cHIgaXMgYSB0dXBsZSBvZiB0d28gZXhwcmVzc2lvbnMsIGZvciB0aGUgdHdvCiAgICAgICAgIG9wZXJhdG9ycyBzZXBhcmF0aW5nIHRoZSAzIHRlcm1zCiAgICAgICAtIG51bVRlcm1zIGlzIHRoZSBudW1iZXIgb2YgdGVybXMgZm9yIHRoaXMgb3BlcmF0b3IgKG11c3QgYmUgMSwKICAgICAgICAgMiwgb3IgMykKICAgICAgIC0gcmlnaHRMZWZ0QXNzb2MgaXMgdGhlIGluZGljYXRvciB3aGV0aGVyIHRoZSBvcGVyYXRvciBpcyByaWdodAogICAgICAgICBvciBsZWZ0IGFzc29jaWF0aXZlLCB1c2luZyB0aGUgcHlwYXJzaW5nLWRlZmluZWQgY29uc3RhbnRzCiAgICAgICAgIGBgb3BBc3NvYy5SSUdIVGBgIGFuZCBgYG9wQXNzb2MuTEVGVGBgLgogICAgICAgLSBwYXJzZUFjdGlvbiBpcyB0aGUgcGFyc2UgYWN0aW9uIHRvIGJlIGFzc29jaWF0ZWQgd2l0aAogICAgICAgICBleHByZXNzaW9ucyBtYXRjaGluZyB0aGlzIG9wZXJhdG9yIGV4cHJlc3Npb24gKHRoZSBwYXJzZSBhY3Rpb24KICAgICAgICAgdHVwbGUgbWVtYmVyIG1heSBiZSBvbWl0dGVkKTsgaWYgdGhlIHBhcnNlIGFjdGlvbiBpcyBwYXNzZWQKICAgICAgICAgYSB0dXBsZSBvciBsaXN0IG9mIGZ1bmN0aW9ucywgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcKICAgICAgICAgYGBzZXRQYXJzZUFjdGlvbigqZm4pYGAKICAgICAgICAgKDpjbGFzczpgUGFyc2VyRWxlbWVudC5zZXRQYXJzZUFjdGlvbmApCiAgICAgLSBscGFyIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgbGVmdC1wYXJlbnRoZXNlcwogICAgICAgKGRlZmF1bHQ9IGBgU3VwcHJlc3MoJygnKWBgKQogICAgIC0gcnBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIHJpZ2h0LXBhcmVudGhlc2VzCiAgICAgICAoZGVmYXVsdD0gYGBTdXBwcmVzcygnKScpYGApCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgc2ltcGxlIGV4YW1wbGUgb2YgZm91ci1mdW5jdGlvbiBhcml0aG1ldGljIHdpdGggaW50cyBhbmQKICAgICAgICAjIHZhcmlhYmxlIG5hbWVzCiAgICAgICAgaW50ZWdlciA9IHB5cGFyc2luZ19jb21tb24uc2lnbmVkX2ludGVnZXIKICAgICAgICB2YXJuYW1lID0gcHlwYXJzaW5nX2NvbW1vbi5pZGVudGlmaWVyCgogICAgICAgIGFyaXRoX2V4cHIgPSBpbmZpeE5vdGF0aW9uKGludGVnZXIgfCB2YXJuYW1lLAogICAgICAgICAgICBbCiAgICAgICAgICAgICgnLScsIDEsIG9wQXNzb2MuUklHSFQpLAogICAgICAgICAgICAob25lT2YoJyogLycpLCAyLCBvcEFzc29jLkxFRlQpLAogICAgICAgICAgICAob25lT2YoJysgLScpLCAyLCBvcEFzc29jLkxFRlQpLAogICAgICAgICAgICBdKQoKICAgICAgICBhcml0aF9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICA1KzMqNgogICAgICAgICAgICAoNSszKSo2CiAgICAgICAgICAgIC0yLS0xMQogICAgICAgICAgICAnJycsIGZ1bGxEdW1wPUZhbHNlKQoKICAgIHByaW50czo6CgogICAgICAgIDUrMyo2CiAgICAgICAgW1s1LCAnKycsIFszLCAnKicsIDZdXV0KCiAgICAgICAgKDUrMykqNgogICAgICAgIFtbWzUsICcrJywgM10sICcqJywgNl1dCgogICAgICAgIC0yLS0xMQogICAgICAgIFtbWyctJywgMl0sICctJywgWyctJywgMTFdXV0KICAgIGMAAAAAAAAAAAAAAAADAAAAQAAAAHMWAAAAZQBaAWQAWgJkBWQCZAOEAVoDZARTACkGehppbmZpeE5vdGF0aW9uLjxsb2NhbHM+Ll9GQlRjBAAAAAAAAAAEAAAABAAAAFMAAABzFgAAAHwAagCgAXwBfAKhAgEAfAJnAGYCUwApAU4pAnKVAQAAcv4BAAApBHLIAAAAcpQBAAByxAAAAHLbAQAAchIAAAByEgAAAHITAAAAcucAAACtFwAAcwQAAAAAAQ4BeiRpbmZpeE5vdGF0aW9uLjxsb2NhbHM+Ll9GQi5wYXJzZUltcGxOKQFUKQRyDwAAAHIQAAAAchEAAABy5wAAAHISAAAAchIAAAByEgAAAHITAAAA2gNfRkKsFwAAcwIAAAAIAXKIAwAAKQFOTnKtAgAAcpEAAAB6ByVzIHRlcm16CSVzJXMgdGVy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aW5nYCkKCiAgICBJZiBhbiBleHByZXNzaW9uIGlzIG5vdCBwcm92aWRlZCBmb3IgdGhlIGNvbnRlbnQgYXJndW1lbnQsIHRoZQogICAgbmVzdGVkIGV4cHJlc3Npb24gd2lsbCBjYXB0dXJlIGFsbCB3aGl0ZXNwYWNlLWRlbGltaXRlZCBjb250ZW50CiAgICBiZXR3ZWVuIGRlbGltaXRlcnMgYXMgYSBsaXN0IG9mIHNlcGFyYXRlIHZhbHVlcy4KCiAgICBVc2UgdGhlIGBgaWdub3JlRXhwcmBgIGFyZ3VtZW50IHRvIGRlZmluZSBleHByZXNzaW9ucyB0aGF0IG1heQogICAgY29udGFpbiBvcGVuaW5nIG9yIGNsb3NpbmcgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcwogICAgb3BlbmluZyBvciBjbG9zaW5nIGNoYXJhY3RlcnMgZm9yIG5lc3RpbmcsIHN1Y2ggYXMgcXVvdGVkU3RyaW5nIG9yCiAgICBhIGNvbW1lbnQgZXhwcmVzc2lvbi4gIFNwZWNpZnkgbXVsdGlwbGUgZXhwcmVzc2lvbnMgdXNpbmcgYW4KICAgIDpjbGFzczpgT3JgIG9yIDpjbGFzczpgTWF0Y2hGaXJzdGAuIFRoZSBkZWZhdWx0IGlzCiAgICA6Y2xhc3M6YHF1b3RlZFN0cmluZ2AsIGJ1dCBpZiBubyBleHByZXNzaW9ucyBhcmUgdG8gYmUgaWdub3JlZCwgdGhlbgogICAgcGFzcyBgYE5vbmVgYCBmb3IgdGhpcyBhcmd1bWVudC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgZGF0YV90eXBlID0gb25lT2YoInZvaWQgaW50IHNob3J0IGxvbmcgY2hhciBmbG9hdCBkb3VibGUiKQogICAgICAgIGRlY2xfZGF0YV90eXBlID0gQ29tYmluZShkYXRhX3R5cGUgKyBPcHRpb25hbChXb3JkKCcqJykpKQogICAgICAgIGlkZW50ID0gV29yZChhbHBoYXMrJ18nLCBhbHBoYW51bXMrJ18nKQogICAgICAgIG51bWJlciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyCiAgICAgICAgYXJnID0gR3JvdXAoZGVjbF9kYXRhX3R5cGUgKyBpZGVudCkKICAgICAgICBMUEFSLCBSUEFSID0gbWFwKFN1cHByZXNzLCAiKCkiKQoKICAgICAgICBjb2RlX2JvZHkgPSBuZXN0ZWRFeHByKCd7JywgJ30nLCBpZ25vcmVFeHByPShxdW90ZWRTdHJpbmcgfCBjU3R5bGVDb21tZW50KSkKCiAgICAgICAgY19mdW5jdGlvbiA9IChkZWNsX2RhdGFfdHlwZSgidHlwZSIpCiAgICAgICAgICAgICAgICAgICAgICArIGlkZW50KCJuYW1lIikKICAgICAgICAgICAgICAgICAgICAgICsgTFBBUiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QoYXJnKSwgW10pKCJhcmdzIikgKyBSUEFSCiAgICAgICAgICAgICAgICAgICAgICArIGNvZGVfYm9keSgiYm9keSIpKQogICAgICAgIGNfZnVuY3Rpb24uaWdub3JlKGNTdHlsZUNvbW1lbnQpCgogICAgICAgIHNvdXJjZV9jb2RlID0gJycnCiAgICAgICAgICAgIGludCBpc19vZGQoaW50IHgpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoeCUyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW50IGRlY190b19oZXgoY2hhciBoY2hhcikgewogICAgICAgICAgICAgICAgaWYgKGhjaGFyID49ICcwJyAmJiBoY2hhciA8PSAnOScpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9yZChoY2hhciktb3JkKCcwJykpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEwK29yZChoY2hhciktb3JkKCdBJykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgJycnCiAgICAgICAgZm9yIGZ1bmMgaW4gY19mdW5jdGlvbi5zZWFyY2hTdHJpbmcoc291cmNlX2NvZGUpOgogICAgICAgICAgICBwcmludCgiJShuYW1lKXMgKCUodHlwZSlzKSBhcmdzOiAlKGFyZ3MpcyIgJSBmdW5jKQoKCiAgICBwcmludHM6OgoKICAgICAgICBpc19vZGQgKGludCkgYXJnczogW1snaW50JywgJ3gnXV0KICAgICAgICBkZWNfdG9faGV4IChpbnQpIGFyZ3M6IFtbJ2NoYXInLCAnaGNoYXInXV0KICAgIHoub3BlbmluZyBhbmQgY2xvc2luZyBzdHJpbmdzIGNhbm5vdCBiZSB0aGUgc2FtZU5yqAAAACkBcqoCAABjAQAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAKAAoQBTACkCTnIBAAAAKQFy2QAAACkBcpcAAAByEgAAAHISAAAAchMAAABymAAAADsYAABymQAAAHocbmVzdGVkRXhwci48bG9jYWxzPi48bGFtYmRhPmMBAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAoAChAFMAKQJOcgEAAAApAXLZAAAAKQFylwAAAHISAAAAchIAAAByEwAAAHKYAAAAQBgAAHKZAAAAYwEAAAAAAAAAAQAAAAIAAABTAAAAcwwAAAB8AGQBGQCgAKEAUwApAk5yAQAAACkBctkAAAApAXKXAAAAchIAAAByEgAAAHITAAAAcpgAAABHGAAAcpkAAABjAQAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAKAAoQBTACkCTnIBAAAAKQFy2QAAACkBcpcAAAByEgAAAHISAAAAchMAAABymAAAAEwYAABymQAAAHpPb3BlbmluZyBhbmQgY2xvc2luZyBhcmd1bWVudHMgbXVzdCBiZSBzdHJpbmdzIGlmIG5vIGNvbnRlbnQgZXhwcmVzc2lvbiBpcyBnaXZlbnoWbmVzdGVkICVzJXMgZXhwcmVzc2lvbikScjwCAABymgAAAHIfAQAActMAAAByJgAAAHI2AAAAciUAAAByQQAAAHK0AQAAcqEAAAByYQAAAHJSAQAAcjEAAAByKwAAAHItAAAAckgAAAByTwAAAHLSAQAAKQXaBm9wZW5lctoGY2xvc2Vy2gdjb250ZW50ch0DAABypAAAAHISAAAAchIAAAByEwAAAHJuAAAA7xcAAHM2AAAAAEEIAQgBCgEYARgBCAEIAQICGgIMAggCEAEOAggBBAMsAQwCBAImAQwCCAEGAQoBKgIkARIBYwMAAAAAAAAACwAAAAYAAAADAAAAcyYBAACIAWQBZAGFAhkAiQCHAIcBZgJkAmQDhAiJAocBZgFkBGQFhAh9A4cBZgFkBmQHhAh9BIcBZgFkCGQJhAh9BXQAdAGDAKACZAqhAaADoQB0BIMAZAuNAn0GdAWDAHQFgwCgBnwEoQEXAKAHZAyhAX0HdAWDAKAGfAOhAaAHZA2hAX0IdAWDAKAGfAWhAaAHZA6hAX0JfAJyzHQIdAl8BoMBfAcXAHQAfAh0CHwAgwEXAHQJfAaDARcAdASDAGQLjQIXAHwJFwCDAX0Kbi50CHQJfAaDAXQAfAh0CHwAgwEXAHQJfAaDARcAdASDAGQLjQIXAHwJFwCDAX0KfAqgCocCZgFkD2QQhAihAQEAfACgC3QMdAGDABcAoQEBAHwKoAdkEaEBUwApEmHmCAAASGVscGVyIG1ldGhvZCBmb3IgZGVmaW5pbmcgc3BhY2UtZGVsaW1pdGVkIGluZGVudGF0aW9uIGJsb2NrcywKICAgIHN1Y2ggYXMgdGhvc2UgdXNlZCB0byBkZWZpbmUgYmxvY2sgc3RhdGVtZW50cyBpbiBQeXRob24gc291cmNlIGNvZGUuCgogICAgUGFyYW1ldGVyczoKCiAgICAgLSBibG9ja1N0YXRlbWVudEV4cHIgLSBleHByZXNzaW9uIGRlZmluaW5nIHN5bnRheCBvZiBzdGF0ZW1lbnQgdGhhdAogICAgICAgaXMgcmVwZWF0ZWQgd2l0aGluIHRoZSBpbmRlbnRlZCBibG9jawogICAgIC0gaW5kZW50U3RhY2sgLSBsaXN0IGNyZWF0ZWQgYnkgY2FsbGVyIHRvIG1hbmFnZSBpbmRlbnRhdGlvbiBzdGFjawogICAgICAgKG11bHRpcGxlIHN0YXRlbWVudFdpdGhJbmRlbnRlZEJsb2NrIGV4cHJlc3Npb25zIHdpdGhpbiBhIHNpbmdsZQogICAgICAgZ3JhbW1hciBzaG91bGQgc2hhcmUgYSBjb21tb24gaW5kZW50U3RhY2spCiAgICAgLSBpbmRlbnQgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBibG9jayBtdXN0IGJlIGluZGVudGVkIGJleW9uZAogICAgICAgdGhlIGN1cnJlbnQgbGV2ZWw7IHNldCB0byBGYWxzZSBmb3IgYmxvY2sgb2YgbGVmdC1tb3N0CiAgICAgICBzdGF0ZW1lbnRzIChkZWZhdWx0PSBgYFRydWVgYCkKCiAgICBBIHZhbGlkIGJsb2NrIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgYGBibG9ja1N0YXRlbWVudGBgLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBkYXRhID0gJycnCiAgICAgICAgZGVmIEEoeik6CiAgICAgICAgICBBMQogICAgICAgICAgQiA9IDEwMAogICAgICAgICAgRyA9IEEyCiAgICAgICAgICBBMgogICAgICAgICAgQTMKICAgICAgICBCCiAgICAgICAgZGVmIEJCKGEsYixjKToKICAgICAgICAgIEJCMQogICAgICAgICAgZGVmIEJCQSgpOgogICAgICAgICAgICBiYmExCiAgICAgICAgICAgIGJiYTIKICAgICAgICAgICAgYmJhMwogICAgICAgIEMKICAgICAgICBECiAgICAgICAgZGVmIHNwYW0oeCx5KToKICAgICAgICAgICAgIGRlZiBlZ2dzKHopOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAnJycKCgogICAgICAgIGluZGVudFN0YWNrID0gWzFdCiAgICAgICAgc3RtdCA9IEZvcndhcmQoKQoKICAgICAgICBpZGVudGlmaWVyID0gV29yZChhbHBoYXMsIGFscGhhbnVtcykKICAgICAgICBmdW5jRGVjbCA9ICgiZGVmIiArIGlkZW50aWZpZXIgKyBHcm91cCgiKCIgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KGlkZW50aWZpZXIpKSArICIpIikgKyAiOiIpCiAgICAgICAgZnVuY19ib2R5ID0gaW5kZW50ZWRCbG9jayhzdG10LCBpbmRlbnRTdGFjaykKICAgICAgICBmdW5jRGVmID0gR3JvdXAoZnVuY0RlY2wgKyBmdW5jX2JvZHkpCgogICAgICAgIHJ2YWx1ZSA9IEZvcndhcmQoKQogICAgICAgIGZ1bmNDYWxsID0gR3JvdXAoaWRlbnRpZmllciArICIoIiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QocnZhbHVlKSkgKyAiKSIpCiAgICAgICAgcnZhbHVlIDw8IChmdW5jQ2FsbCB8IGlkZW50aWZpZXIgfCBXb3JkKG51bXMpKQogICAgICAgIGFzc2lnbm1lbnQgPSBHcm91cChpZGVudGlmaWVyICsgIj0iICsgcnZhbHVlKQogICAgICAgIHN0bXQgPDwgKGZ1bmNEZWYgfCBhc3NpZ25tZW50IHwgaWRlbnRpZmllcikKCiAgICAgICAgbW9kdWxlX2JvZHkgPSBPbmVPck1vcmUoc3RtdCkKCiAgICAgICAgcGFyc2VUcmVlID0gbW9kdWxlX2JvZHkucGFyc2VTdHJpbmcoZGF0YSkKICAgICAgICBwYXJzZVRyZWUucHByaW50KCkKCiAgICBwcmludHM6OgoKICAgICAgICBbWydkZWYnLAogICAgICAgICAgJ0EnLAogICAgICAgICAgWycoJywgJ3onLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1snQTEnXSwgW1snQicsICc9JywgJzEwMCddXSwgW1snRycsICc9JywgJ0EyJ11dLCBbJ0EyJ10sIFsnQTMnXV1dLAogICAgICAgICAnQicsCiAgICAgICAgIFsnZGVmJywKICAgICAgICAgICdCQicsCiAgICAgICAgICBbJygnLCAnYScsICdiJywgJ2MnLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1snQkIxJ10sIFtbJ2RlZicsICdCQkEnLCBbJygnLCAnKSddLCAnOicsIFtbJ2JiYTEnXSwgWydiYmEyJ10sIFsnYmJhMyddXV1dXV0sCiAgICAgICAgICdDJywKICAgICAgICAgJ0QnLAogICAgICAgICBbJ2RlZicsCiAgICAgICAgICAnc3BhbScsCiAgICAgICAgICBbJygnLCAneCcsICd5JywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbWydkZWYnLCAnZWdncycsIFsnKCcsICd6JywgJyknXSwgJzonLCBbWydwYXNzJ11dXV1dXV0KICAgIE5jAAAAAAAAAAAAAAAABAAAABMAAABzEAAAAIgAiAFkAGQAhQI8AGQAUwApAU5yEgAAAHISAAAAKQLaDGJhY2t1cF9zdGFja9oLaW5kZW50U3RhY2tyEgAAAHITAAAA2gtyZXNldF9zdGFja6oYAABzAgAAAAABeiJpbmRlbnRlZEJsb2NrLjxs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oAxlBqEBWg1lCWUOgwGgC2QDoQGgDGUEZQVkBIMCoQFaD2UQZAWDAaALZAahAaAMZQahAVoRZRGDAKAMZQihAWQHFwBlEYMAoAxlCKEBFwCgC2QIoQFaEmUSoBNkCWQKhAChAQEAZRJlEWUUZRRkC4MBoBWhAGUSFwCDARcAQgCgC2QMoQFaFmUWoBNlF6EBAQBlEGQNgwGgC2QOoQGgDGUIoQFaGGUQZA+DAaALZBChAaAMZQihAVoZZRllGEIAZRFCAKAaoQBaG2UQZBGDAaALZBKhAaAMZQihAVocZQllHWQTFwBlHmQTFwCDAqALZBShAVofZRBkFYMBoAtkFqEBWiBlEGQXgwGgC2QYoQFaIWUhZBllIRcAZBoUABcAoAtkG6EBWiJlFGUhZBllIRcAZBwUABcAgwFkHRcAZRRlIWQZZSEXAGQcFAAXAIMBFwCgC2QeoQFaI2UjoCRkH2QKhAChAQEAZCBlIBcAoAtkIaEBWiVlJmUiZSVCAGUjQgCgC2QioQGDAaALZCKhAVonZRBkI4MBoAtkJKEBWihlKWQ9ZCZkJ4QBgwFaKmUpZD5kKWQqhAGDAVorZRBkK4MBoAtkLKEBWixlEGQtgwGgC2QuoQFaLWUQZC+DAaALZDChAVouZS+gFaEAZTCgFaEAQgBaMWUpZDFkMoQAgwFaMmUmZTNlNGQzgwEPAGU1gwAPABcAZQllNmQzZDSNAhcAZRRlN2Q1gwGDARcAgwGDAaAaoQCgC2Q2oQFaOGU5ZRRlOqA7oQBlOEIAZDdkOI0CgwGgC2Q5oQFaPGUpZQRkOmQKhACDAYMBWj1lKWUEZDtkCoQAgwGDAVo+ZDxTACk/cowAAABhHwsAAEhlcmUgYXJlIHNvbWUgY29tbW9uIGxvdy1sZXZlbCBleHByZXNzaW9ucyB0aGF0IG1heSBiZSB1c2VmdWwgaW4KICAgIGp1bXAtc3RhcnRpbmcgcGFyc2VyIGRldmVsb3BtZW50OgoKICAgICAtIG51bWVyaWMgZm9ybXMgKDpjbGFzczpgaW50ZWdlcnM8aW50ZWdlcj5gLCA6Y2xhc3M6YHJlYWxzPHJlYWw+YCwKICAgICAgIDpjbGFzczpgc2NpZW50aWZpYyBub3RhdGlvbjxzY2lfcmVhbD5gKQogICAgIC0gY29tbW9uIDpjbGFzczpgcHJvZ3JhbW1pbmcgaWRlbnRpZmllcnM8aWRlbnRpZmllcj5gCiAgICAgLSBuZXR3b3JrIGFkZHJlc3NlcyAoOmNsYXNzOmBNQUM8bWFjX2FkZHJlc3M+YCwKICAgICAgIDpjbGFzczpgSVB2NDxpcHY0X2FkZHJlc3M+YCwgOmNsYXNzOmBJUHY2PGlwdjZfYWRkcmVzcz5gKQogICAgIC0gSVNPODYwMSA6Y2xhc3M6YGRhdGVzPGlzbzg2MDFfZGF0ZT5gIGFuZAogICAgICAgOmNsYXNzOmBkYXRldGltZTxpc284NjAxX2RhdGV0aW1lPmAKICAgICAtIDpjbGFzczpgVVVJRDx1dWlkPmAKICAgICAtIDpjbGFzczpgY29tbWEtc2VwYXJhdGVkIGxpc3Q8Y29tbWFfc2VwYXJhdGVkX2xpc3Q+YAoKICAgIFBhcnNlIGFjdGlvbnM6CgogICAgIC0gOmNsYXNzOmBjb252ZXJ0VG9JbnRlZ2VyYAogICAgIC0gOmNsYXNzOmBjb252ZXJ0VG9GbG9hdGAKICAgICAtIDpjbGFzczpgY29udmVydFRvRGF0ZWAKICAgICAtIDpjbGFzczpgY29udmVydFRvRGF0ZXRpbWVgCiAgICAgLSA6Y2xhc3M6YHN0cmlwSFRNTFRhZ3NgCiAgICAgLSA6Y2xhc3M6YHVwY2FzZVRva2Vuc2AKICAgICAtIDpjbGFzczpgZG93bmNhc2VUb2tlbnNgCgogICAgRXhhbXBsZTo6CgogICAgICAgIHB5cGFyc2luZ19jb21tb24ubnVtYmVyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICsxMDAKICAgICAgICAgICAgMy4xNDE1OQogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5mbnVtYmVyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgICAgIDEwMAogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICsxMDAKICAgICAgICAgICAgMy4xNDE1OQogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5oZXhfaW50ZWdlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgICAgICAxMDAKICAgICAgICAgICAgRkYKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmZyYWN0aW9uLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGZyYWN0aW9ucwogICAgICAgICAgICAxLzIKICAgICAgICAgICAgLTMvNAogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24ubWl4ZWRfaW50ZWdlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBtaXhlZCBmcmFjdGlvbnMKICAgICAgICAgICAgMQogICAgICAgICAgICAxLzIKICAgICAgICAgICAgLTMvNAogICAgICAgICAgICAxLTMvNAogICAgICAgICAgICAnJycpCgogICAgICAgIGltcG9ydCB1dWlkCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi51dWlkLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHV1aWQuVVVJRCkpCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi51dWlkLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIHV1aWQKICAgICAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgICAgICcnJykKCiAgICBwcmludHM6OgoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlCiAgICAgICAgMTAwCiAgICAgICAgWzEwMF0KCiAgICAgICAgLTEwMAogICAgICAgIFstMTAwXQoKICAgICAgICArMTAwCiAgICAgICAgWzEwMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoKICAgICAgICA2LjAyZTIzCiAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAxZS0xMgogICAgICAgIFsxZS0xMl0KCiAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyBmbG9hdAogICAgICAgIDEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgLTEwMAogICAgICAgIFstMTAwLjBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwLjBdCgogICAgICAgIDMuMTQxNTkKICAgICAgICBbMy4xNDE1OV0KCiAgICAgICAgNi4wMmUyMwogICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgMWUtMTIKICAgICAgICBbMWUtMTJdCgogICAgICAgICMgaGV4IG51bWJlcnMKICAgICAgICAxMDAKICAgICAgICBbMjU2XQoKICAgICAgICBGRgogICAgICAgIFsyNTVdCgogICAgICAgICMgZnJhY3Rpb25zCiAgICAgICAgMS8yCiAgICAgICAgWzAuNV0KCiAgICAgICAgLTMvNAogICAgICAgIFstMC43NV0KCiAgICAgICAgIyBtaXhlZCBmcmFjdGlvbnMKICAgICAgICAxCiAgICAgICAgWzFdCgogICAgICAgIDEvMgogICAgICAgIFswLjVdCgogICAgICAgIC0zLzQKICAgICAgICBbLTAuNzVdCgogICAgICAgIDEtMy80CiAgICAgICAgWzEuNzVdCgogICAgICAgICMgdXVpZAogICAgICAgIDEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OAogICAgICAgIFtVVUlEKCcxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgnKV0KICAgINoHaW50ZWdlcnoLaGV4IGludGVnZXJy4wAAAHoIWystXT9cZCt6DnNpZ25lZCBpbnRlZ2Vycm8DAADaCGZyYWN0aW9uYwEAAAAAAAAAAQAAAAMAAABDAAAAcxAAAAB8AGQBGQB8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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 8
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
appdirs.cpython-37.pyc
21.05 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
contextlib2.cpython-37.pyc
15.04 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
distro.cpython-37.pyc
35.81 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ipaddress.cpython-37.pyc
64.93 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-37.pyc
236.85 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
retrying.cpython-37.pyc
7.93 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-37.pyc
26.31 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
2.93 KB
lrw-r--r--
2023-11-13 21:31:06
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).